【发布时间】:2015-06-15 14:44:40
【问题描述】:
我正在开发一个新项目,并且是第一次使用 Spring-Boot。
传统上,当使用 Spring 和属性文件进行配置时,我在发行版 (WAR) 中提供了默认属性,并允许在某些文档化的地方覆盖它们。
例如:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:app.properties</value>
<value>file:${user.home}/.company/app/app.properties</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="ignoreResourceNotFound" value="true" />
</bean>
这将允许我们在不丢失本地系统配置的情况下重新部署应用程序。
阅读documentation on this for Spring-Boot 后,似乎“application.properties”中的任何内容都具有更高的优先级,并覆盖了@PropertySource 注释指定的任何内容。
我喜欢 Spring,因为它允许我们遵守约定,这让我担心我可能一直在做属性级联错误。
提供包含在分发中的合理默认值(嵌入式数据库、简单身份验证等)的外部化属性最合适的方式是什么?
另外,如果有人知道,我很想知道 Spring-Boot 中属性顺序背后的原因。
注意
我尝试查看 SpringApplication.setDefaultProperties,但似乎无法找到获取 SpringApplication 对象引用的位置。 main 方法在其上调用一个静态方法(运行),该方法在捆绑为 WAR 文件时从未实际运行。这样做似乎也有点小技巧。
【问题讨论】:
-
您通常计划在哪里覆盖?环境变量和 JVM 属性覆盖
application.properties。 -
啊。我也这样做,但对于那些只是不要在罐子里放任何东西。我也不在外部容器中运行 Spring Boot 应用程序;我发现独立模式更容易管理。
-
仅当您将应用程序服务器的存在视为给定时。在传统情况下,可能就是这种情况,但新系统可以从只需要一个 JVM 和一个 jar 的基于图像的设置开始。
-
@JustinSmith 我在这里回答了类似的问题stackoverflow.com/questions/29106579/… 也许这会有所帮助。
-
在部署战争时使用“@PropertySource”加载属性的问题是日志属性将被忽略并且日志系统将无法工作。检查这个替代solution
标签: java spring spring-boot