从application.properties说起
- 为什么默认是application.properties?
// ConfigFileApplicationListener.java
private Set<String> getSearchNames() {
// CONFIG_NAME_PROPERTY值为spring.config.name
if (this.environment.containsProperty(CONFIG_NAME_PROPERTY)) {
String property = this.environment.getProperty(CONFIG_NAME_PROPERTY);
return asResolvedSet(property, null);
}
// 增加 names or DEFAULT_NAMES 到 locations 中
// DEFAULT_NAMES止为application
return asResolvedSet(ConfigFileApplicationListener.this.names, DEFAULT_NAMES);
}
- application.properties能够改为别的么?
从下面代码能够看出,如果咱们通过命令行参数配置了spring.config.name,那么就会去找对应的文件。
$ java -jar myproject.jar --spring.config.name=myproject
- 应用spring.profiles.include来激活其余文件:application-db.properties,
application-mq.properties:
spring.profiles.include=db,mq
properties值失效(笼罩)程序
阐明:数值越小,优先级越高
- 如果应用了devtools,则 $HOME/.config/spring-boot下的配置文件优先失效。
- @TestPropertySource注解的测试
- @SpringBootTest中配置的properties
- 命令行参数
- SPRING_APPLICATION_JSON中的配置。
$ java -Dspring.application.json='{“name”:”test”}’ -jar myapp.jar
- ServletConfig中初始话的参数
- ServletContext中初始化的参数
- JNDI属性
在java:comp/env中设置
- Java零碎属性
System.getProperties()
10 操作系统环境变量
- RandomValuePropertySource中配置的random.*
- jar包外的application-{profile}.propreties/yaml变量
- jar包内的application-{profile}.propreties/yaml变量
- jar包外的application.propreties/yaml变量
- jar包内的application.propreties/yaml变量
- @Confiruration类中应用@PropertySoruce注解标注的类。留神,此类变量直到applicationContext刷新后才会被增加到Environment
- 默认的属性
通过SpringApplication.setDefaultProperties设置
实际
对于一些重要的参数,能够在我的项目启动后打印进去,不便监控。
@SpringBootApplication
public class LogTestApplication {
private static final Logger logger = LoggerFactory.getLogger(LogTestApplication.class);
public static void main(String[] args) {
SpringApplication application = new SpringApplication(LogTestApplication.class);
application.addListeners(new TestRunListener());
ConfigurableApplicationContext applicationContext = application.run(args);
String sqlDb = applicationContext.getEnvironment().getProperty("sql.db");
logger.info("sql----db:{}",sqlDb);
}
}
发表回复