2016-08-18 77 views
0

我使用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. 如何使application.properties像Spring Boot那樣不能被新屬性覆蓋?

回答

0

它是通過定義爲ModelConfig加載的bean的順序,它將導致活動配置文件被設置爲'dev'。

BTW,看着你的設置,通過性能配置豆的有效配置文件這樣不是好主意,雖然,spring.profiles.active should be specified in

application.properties 文件,而不是通過單獨的屬性文件加載,所以當應用程序啓動時,它正確地加載豆的輪廓通過命令行參數

當你調用

-Dspring.profiles.active 

或程序設計

context.getEnvironment()。setActiveProfiles(「live」);

一些很好的例子here