SpingBoot 属性加载
属性加载顺序
配置属性加载的顺序
- 开发者工具 `Devtools` 全局配置参数;
- 单元测试上的 `@TestPropertySource` 注解指定的参数;
- 单元测试上的 `@SpringBootTest` 注解指定的参数;
- 命令行指定的参数,如 `java -jar springboot.jar --name="demo"`;
- 命令行中的 `SPRING_APPLICATION_JSONJSON` 指定参数, 如 `java -Dspring.application.json='{"name":"demo"}' -jar springboot.jar`
- `ServletConfig` 初始化参数;
- `ServletContext` 初始化参数;
- JNDI参数(如 `java:comp/env/spring.application.json`);
- Java系统参数(`System.getProperties()`);
- 操作系统环境变量参数;
- `RandomValuePropertySource` 随机数,仅匹配:`ramdom.*`;
- JAR包外面的配置文件参数(`application-{profile}.properties(YAML)`)
- JAR包里面的配置文件参数(`application-{profile}.properties(YAML)`)
- JAR包外面的配置文件参数(`application.properties(YAML)`)
- JAR包里面的配置文件参数(`application.properties(YAML)`)
- `@Configuration`配置文件上 `@PropertySource` 注解加载的参数
- 默认参数(通过 `SpringApplication.setDefaultProperties` 指定)
数字小的优先级越高,即数字小的会覆盖数字大的参数值。
属性配置方式
- PropertyPlaceholderConfigurer:
- <context:property-placeholder location="classpath:sys.properties" />
- @Bean的方式
@Bean
public PropertyPlaceholderConfigurer propertiess() {
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
Resource[] resources = new ClassPathResource[]{new ClassPathResource("sys.properties")};
ppc.setLocations(resources);
ppc.setIgnoreUnresolvablePlaceholders(true);
return ppc;
} - xml 的方式
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:sys.properties</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>
- 通过 springboot 扩展方式:
@Bean
public CommandLineRunner commandLineRunner() {
return (args) -> {
System.setProperty("name", "demo");
};
} 通过 @PropertySource 配置
@PropertySource("classpath:sys.properties")
@Configuration
public class DemoConfig {
}- @SpringBootTest(value = { "name=javastack-test", "sex=1" })
属性获取方式
- 占位符:${PlaceHolder}
- SpEL 表达式 #{}
- 通过 Environment 获取
// 只有使用注解 @PropertySource 的时候可以用,否则会得到 null。
@Autowired
private Environment env; public String getUrl() {
return env.getProperty("demo.jdbc.url");
} - 通过 @Value 注入
@Value("${demo.jdbc.url}")
private String url; - @ConfigurationProperties
@Configuration
@ConfigurationProperties(prefix = "demo.db")
@Data
public class DataBase {
String url;
String username;
String password;
}
SpingBoot 属性加载的更多相关文章
- 静态属性加载到jvm时候就存放在数据共享区,而不是等new后出现
静态属性加载到jvm时候就存放在数据共享区,而不是等new后出现.他的生命周期是 jvm结束 才会消失,一般的方法属性是对象结束后 就会消失.
- Spring Boot的属性加载顺序
伴随着团队的不断壮大,往往不需要开发人员知道测试或者生产环境的全部配置细节,比如数据库密码,帐号信息等.而是希望由运维或者指定的人员去维护配置信息,那么如果要修改某项配置信息,就不得不去修改项 ...
- SpringBoot 教程之属性加载详解
免费Java高级资料需要自己领取,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G. ...
- Entity Framework Core导航属性加载问题
前言 今天下午在开发的时候发现EF Core实体模型中的导航属性为 null,经排查既不是没有加 virtual 关键字,也不是外键关系映射错误. 解决方法 通过查询官网文档,发现,原因在于EF Co ...
- 三 MyBatis配置文件SqlMapCofing.xml(属性加载&类型别名配置&映射文件加载)
SqlMapCofing:dtd,属性加载有固定的顺序Content Model properties:加载属性文件 typeAliases:别名配置 1 定义单个别名:不区分大小写 核心配置: 映射 ...
- spring boot 使用属性加载顺序
1.命令行中传入的参数 2.SPRING_APPLICATION_JSON中的属性.SPRING_APPLICATION_JSON是以JSON格式配置再系统环境变量中的内容 3.java:comp/e ...
- Entity Framework Core 导航属性 加载数据
Loading Related Data https://docs.microsoft.com/en-us/ef/core/querying/related-data Eager loading me ...
- Springboot属性加载与覆盖优先级与SpringCloud Config Service配置
参考官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config. ...
- 高性能Javascript--脚本的无阻塞加载策略
Javascript在浏览器中的性能,可以说是前端开发者所要面对的最重要的可用性问题. 在Yahoo的Yslow23条规则当中,其中一条是将JS放在底部 .原因是,事实上,大多数浏览器使用单进程处理U ...
随机推荐
- easyui_validatebox常用验证
$.extend($.fn.validatebox.defaults.rules, { idcard: {// 验证身份证 validator: function (value) { return / ...
- 循环调用dll库的界面时,首次正常,再次无响应
消息循环错误: 在为使用CPaintManagerUI::MessageLoop()的情况下退出,但却发送了PostQuitMessage(0).
- 直播流RTMP 知识
分享直播相关知识点: http://blog.csdn.net/kingroc/article/details/50839994 #!/bin/bash# Order Finish Startup# ...
- Python开发——8.模块
一.模块 1.模块 (1)定义:一个.py文件就是一个模块 (2)原因:为了防止程序代码越来越长,对函数进行分组放到不同的文件夹里. (3)优点:提高代码的可维护性:模块编写完毕可以被别人引用,也可以 ...
- KITTI数据集的使用——雷达与相机的数据融合
目录 目的 如何实现 kitti数据集简介 kitti数据集的raw_data 利用kitti提供的devkit以及相应数据集的calib文件 解读calib文件夹 解读devkit 目的 使用雷达点 ...
- 《java多线程编程核心技术》(一)使用多线程
了解多线程 进程和多线程的概念和线程的优点: 提及多线程技术,不得不提及"进程"这个概念.百度百科对"进程"的解释如下: 进程(Process)是计算机中的程序 ...
- 关于CSS层叠机制
谈到层叠机制,首先我们要知道什么是声明冲突. 声明冲突有三个条件:①多个选择器选中同一个元素:②声明块里的属性相同:③属性的属性值不同.同时满足这三点时就会产生声明冲突.比如下图html代码: < ...
- C++的IO处理中的头文件以及类理解(1)
C++语言不直接处理输入输出,而是通过一簇定义在标准库中的类型来处理IO.这些类型支持从设备读取数据.向设备写入数据的IO操作,设备可以是文件.控制台窗口等,还有一些类型允许内存IO,即,从strin ...
- SQL Server Integration Services SSIS最佳实践
SQL Server Integration Services Best Practices Tips https://www.mssqltips.com/sql-server-tip-categor ...
- 3-Fiddler修改请求或响应内容
1.修改请求内容 方法一:设置请求前断点,修改请求后发送 1)设置断点 2)选中请求,在inspectors下修改请求内容 3)修改请求后,点击Break on Response按钮,进行请求的发送 ...