Nik*_*ero 7 java spring spring-mvc spring-boot
我将我的Spring Boot应用程序部署为Tomcat中的WAR文件.我期待我的application-local.properties覆盖我的application.properties文件中也存在的值.但似乎只有在application.properties中不存在这些键时才会读取application-local.properties中的值.我的application.properties文件位于我项目的src/main/resources /中,application-local.properties位于$ {catalina.home}/property_files/com/demo/config文件夹中
的context.xml
<Parameter name="spring.profiles.active" value="local" override="false"/>
Run Code Online (Sandbox Code Playgroud)
catalina.properties
shared.loader=${catalina.home}/property_files
Run Code Online (Sandbox Code Playgroud)
AppConfig.java
@Configuration
@PropertySources({
@PropertySource("classpath:application.properties"),
@PropertySource("classpath:com/demo/config/application-${spring.profiles.active}.properties")
})
public class AppConfig extends WebMvcConfigurerAdapter {
}
Run Code Online (Sandbox Code Playgroud)
编辑1:实际上,正在加载我的依赖于环境的属性文件.但它不会覆盖内部属性文件中的任何值.
编辑2:感谢您的所有建议.但我发现我的问题是由目录优先级引起的.事实证明,根类路径上的属性文件优先于任何属性文件,无论它们的声明顺序如何.
小智 5
将默认配置/属性放置在不同的文件中,而不是 application.properties。看来 application.properties 中定义的属性值具有最高优先级。
所以,这样的事情会起作用:
@Configuration
@PropertySource("classpath:application-env.properties")
@PropertySource(value="file:${application.home}/application-env.properties",ignoreResourceNotFound=true)
public class GlobalSettings {
//configuration values
}
Run Code Online (Sandbox Code Playgroud)
在 Spring 4.x 和 Java 8 中测试
不要使用许多 propertySource 注释,而是在启动应用程序时尝试设置
java -jar myproject.jar --spring.config.location={your_location}/application.properties,classpath:/override.properties.
您作为命令行的一部分提供的任何内容都将具有最高优先级。
或者做这样的事情并测试
@Configuration
@PropertySource("classpath:application.properties")
public class DefaultConfiguration {}
@Configuration
@PropertySource("classpath:{environment_specific_property_name}.properties")
public class EnvironmentSpecific{
@Configuration
@Import(DefaultConfiguration .class)
static class Configuration {}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7951 次 |
| 最近记录: |