繁体   English   中英

覆盖多个Spring应用程序属性

[英]Override Multiple Spring Application Properties

我正在使用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不能被新属性覆盖?

它是按定义的bean加载ModelConfig的顺序进行的,这将导致将活动概要文件设置为“ dev”。

顺便说一句,查看您的设置,通过这样的属性文件配置bean的活动配置文件不是一个好主意, 应该在以下位置指定spring.profiles.active

application.properties文件,而不是通过单独的属性文件加载,因此在应用程序启动时,它将为配置文件正确加载Bean

或在调用时通过命令行参数

-Dspring.profiles.active

或以编程方式

context.getEnvironment()。setActiveProfiles(“ live”);

这里有一些很好的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM