覆盖多个Spring应用程序属性

时间:2016-08-18 09:13:00

标签: java spring

我正在使用Maven创建简单的Spring应用程序,并且有2个配置和属性。层次结构是:

- package.main
  - App.java
  - AppConfig.java
  - app.properties
- package.main.model
  - ModelConfig.java
  - model.properties

App.java

public static void main(String[] args) {
    ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
    System.out.println(applicationContext.getEnvironment().getActiveProfiles()[0]);
}

AppConfig.java

@Configuration
@Import(ModelConfig.class)
@PropertySource("classpath:/package/main/app.properties")
public class AppConfig {}

app.properties

spring.profiles.active = prod

ModelConfig.java

@Configuration
@PropertySource("classpath:/package/main/model/model.properties")
@ComponentScan
public class ModelConfig {}

model.properties

spring.profiles.active = dev
  1. 为什么model.properties会覆盖app.properties(结果为dev)?
  2. 如何在Spring Boot中使application.properties像新属性一样无法覆盖?

1 个答案:

答案 0 :(得分:0)

按照定义为加载ModelConfig的bean的顺序,它将导致为' dev'设置活动的配置文件。

BTW,看看你的设置,通过这样的属性文件配置bean的活动配置文件虽然不是好主意,spring.profiles.active should be specified in

<强> application.properties 文件,而不是通过单独的属性文件加载,所以当应用程序启动时,它正确加载bean的配置文件

调用

时,

通过命令行参数

-Dspring.profiles.active

或以编程方式

context.getEnvironment()setActiveProfiles(&#34;活&#34);

一些很好的例子here