我有一个spring项目,其中有一个application.properties文件,以及一个application-profile1.properties和一个application-profile2.properties。
application-profile1/2.properties 内部有一个属性,我们称之为 my.first.property。 我需要的行为如下:
在 application-profile1.properties 中,my.first.property 将具有硬编码值,例如:
my.first.property=propertyvalue
。
在 application-profile2.properties 中,my.first.property 将尝试从环境中导入值,例如:my.first.property=${MY_FIRST_PROPERTY}
问题是,无论我做什么,在我的@Configuration类中,当我声明一个变量myFirstPropery时,spring将始终寻找匹配的环境变量,并且会忽略application.properties文件,如果它找到一个匹配项。 我怎样才能实现所需的行为?有没有办法阻止 spring 将环境变量优先于我的 .properties 文件?
针对不同的环境,您可以创建不同的属性文件。
为了发展(当地环境)
application-dev.properties
用于生产(实时环境)
application.properties
您可以使用相同的变量名称和不同的值。
最需要注意的是你应该在应用程序类中配置环境。
public class YourApplication extends SpringBootServletInitializer {
//profiles("dev") is for local
public static void main(String[] args) {
new SpringApplicationBuilder()
.profiles("dev")
.sources(GisApplication.class)
.run(args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder
.profiles("dev")
.sources(YourApplication.class);
}
您可以取消实时配置文件部分的注释,并将
dev
保留为本地配置文件。
希望有帮助。