首页 > 解决方案 > 默认 Spring Data MongoDB 属性值

问题描述

我有一个新的 MongoDB,这意味着没有用户、密码和/或身份验证数据库。将其转换为.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.passwordspring.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:""}.

我如何才能实现这一目标?甚至可能吗?

标签: spring-bootspring-dataspring-data-mongodb

解决方案


我没有尝试过,但是 Spring boot 应该能够获取环境变量并将它们用作属性,而无需将它们放入 yaml 文件中。例如,如果您命名 OS 环境变量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 查找此处记录的属性的位置。


推荐阅读