spring-boot - 默认 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.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:""}
.
我如何才能实现这一目标?甚至可能吗?
解决方案
我没有尝试过,但是 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 查找此处记录的属性的位置。
推荐阅读
- c++ - C++ std::enable_if 回退?
- scala - Scala:如何对调用该方法的实例类型进行模式匹配?
- javascript - React 的函数式 setState 如何确定哪些字段已更新?
- python - Hyperledger Sawtooth + Docker
- swift - 在表格视图中我想添加一些图像,但是当我运行它时它没有显示并且我已经在 assets.xcassets 中导入了图像
- interface - Webassembly (WASI) 运行时能够自行呈现(或执行)什么?
- qt - Qt 将 gui 小部件移动到 gui 线程
- java - 创建 ImageViewer JavaFX 时出现 FileNotFound 异常
- python - 深度 Q 学习**没有** OpenAI Gym
- excel - 无法弄清楚为什么我会收到运行时错误 9:下标超出范围错误