Spring 引导配置优先级
Spring Boot Configuration Priority
我正在做一个新项目,第一次使用 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 文件时,它实际上永远不会 运行。这样做似乎也有点麻烦。
SpringApplication
是一个 public class,因此您可以在 运行 您的应用程序之前创建一个实例并设置其属性(静态 run()
方法是只是方便)。您还可以使用 SpringApplicationBuilder
,这是您在外部容器中 运行 时作为回调获得的内容。使用这些 API,您可以设置默认属性和配置文件,包括 application.properties
文件的位置 (spring.config.location
) 和名称 (spring.config.name
)。
请注意(根据您提供的 link)您还可以在容器中使用 JNDI 变量来覆盖或设置环境属性。如果您将多个应用程序打包到同一个 JVM 中,这也很有用。
我正在做一个新项目,第一次使用 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 文件时,它实际上永远不会 运行。这样做似乎也有点麻烦。
SpringApplication
是一个 public class,因此您可以在 运行 您的应用程序之前创建一个实例并设置其属性(静态 run()
方法是只是方便)。您还可以使用 SpringApplicationBuilder
,这是您在外部容器中 运行 时作为回调获得的内容。使用这些 API,您可以设置默认属性和配置文件,包括 application.properties
文件的位置 (spring.config.location
) 和名称 (spring.config.name
)。
请注意(根据您提供的 link)您还可以在容器中使用 JNDI 变量来覆盖或设置环境属性。如果您将多个应用程序打包到同一个 JVM 中,这也很有用。