代码之家  ›  专栏  ›  技术社区  ›  Yves Calaci

默认Spring Data MongoDB属性值

  •  0
  • Yves Calaci  · 技术社区  · 5 年前

    我有一个新的MongoDB,这意味着没有用户、密码和/或身份验证数据库。 把这个翻译成a .properties 文件,这应该是:

    spring.data.mongodb.host=localhost
    spring.data.mongodb.port=27017
    

    …以及 .yaml/.yml :

    spring:
      data:
        mongodb:
          host: localhost
          port: 27017
    

    现在,让我们假设我想使用环境变量,如果它们被设置,就像这样:

    spring:
      data:
        mongodb:
          host: ${MONGODB_HOST:localhost}
          port: ${MONGODB_PORT:27017}
    

    到目前为止,一切都按预期进行。

    我想实现的目标与 spring.data.mongodb.user , spring.data.mongodb.password spring.data.mongodb.authentication-database 物业。我尝试过对这些属性执行相同的技术,但如果在环境中找不到它们,则会抛出异常,如下所示:

    spring:
      data:
        mongodb:
          host: ${MONGODB_HOST:localhost}
          port: ${MONGODB_PORT:27017}
          username: ${MONGODB_USERNAME}
          password: ${MONGODB_PASSWORD}
          authentication-database: ${MONGODB_AUTHENTICATION_DATABASE}
    

    我甚至尝试过设置空/空白值,如 ${MONGODB_USERNAME:} , ${MONGODB_USERNAME:''} ${MONGODB_USERNAME:""} .

    我如何实现这一目标?这有可能吗?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Hopey One    5 年前

    我还没有尝试过,但Spring boot应该能够拾取环境变量并将其用作属性,而无需将其放入yaml文件中。例如,如果您命名一个操作系统环境变量 SPRING_DATA_MONGODB_USERNAME 该值应显示在spring属性中 spring.data.mongodb.username 。这将允许您仅在需要时指定用户名属性。

    另一种方法是使用外部化配置。如果您从胖jar启动应用程序,则jar外同一目录中的application.yml可以添加您的其他属性:

    spring:
      data:
      mongodb:
        username: fred
        password: password
    

    而不会影响jar中提供的application.yml中指定的属性。

    有一个很长的有序列表,列出了spring boot在哪里查找记录的属性 here .