属性加载顺序

配置属性加载的顺序

  1. 开发者工具 `Devtools` 全局配置参数;
  2. 单元测试上的 `@TestPropertySource` 注解指定的参数;
  3. 单元测试上的 `@SpringBootTest` 注解指定的参数;
  4. 命令行指定的参数,如 `java -jar springboot.jar --name="demo"`;
  5. 命令行中的 `SPRING_APPLICATION_JSONJSON` 指定参数, 如 `java -Dspring.application.json='{"name":"demo"}' -jar springboot.jar`
  6. `ServletConfig` 初始化参数;
  7. `ServletContext` 初始化参数;
  8. JNDI参数(如 `java:comp/env/spring.application.json`);
  9. Java系统参数(`System.getProperties()`);
  10. 操作系统环境变量参数;
  11. `RandomValuePropertySource` 随机数,仅匹配:`ramdom.*`;
  12. JAR包外面的配置文件参数(`application-{profile}.properties(YAML)`)
  13. JAR包里面的配置文件参数(`application-{profile}.properties(YAML)`)
  14. JAR包外面的配置文件参数(`application.properties(YAML)`)
  15. JAR包里面的配置文件参数(`application.properties(YAML)`)
  16. `@Configuration`配置文件上 `@PropertySource` 注解加载的参数
  17. 默认参数(通过 `SpringApplication.setDefaultProperties` 指定)

数字小的优先级越高,即数字小的会覆盖数字大的参数值。

属性配置方式

  1. PropertyPlaceholderConfigurer:
    • <context:property-placeholder location="classpath:sys.properties" />
    • @Bean的方式
      1. @Bean
      2. public PropertyPlaceholderConfigurer propertiess() {
      3. PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
      4. Resource[] resources = new ClassPathResource[]{new ClassPathResource("sys.properties")};
      5. ppc.setLocations(resources);
      6. ppc.setIgnoreUnresolvablePlaceholders(true);
      7. return ppc;
      8. }
    • xml 的方式
      1. <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      2. <property name="locations">
      3. <list>
      4. <value>classpath:sys.properties</value>
      5. </list>
      6. </property>
      7. <property name="ignoreUnresolvablePlaceholders" value="true"/>
      8. </bean>  
  1. 通过 springboot 扩展方式:
    1. @Bean
    2. public CommandLineRunner commandLineRunner() {
    3. return (args) -> {
    4. System.setProperty("name", "demo");
    5. };
    6. }
  2. 通过 @PropertySource 配置

    1. @PropertySource("classpath:sys.properties")
    2. @Configuration
    3. public class DemoConfig {
    4. }
  3. @SpringBootTest(value = { "name=javastack-test", "sex=1" })

属性获取方式

  1. 占位符:${PlaceHolder}
  2. SpEL 表达式 #{}
  3. 通过 Environment 获取
    1. // 只有使用注解 @PropertySource 的时候可以用,否则会得到 null。
    2. @Autowired
    3. private Environment env;
    4.  
    5. public String getUrl() {
    6. return env.getProperty("demo.jdbc.url");
    7. }  
  4. 通过 @Value 注入
    1. @Value("${demo.jdbc.url}")
    2. private String url;
  5. @ConfigurationProperties
    1. @Configuration
    2. @ConfigurationProperties(prefix = "demo.db")
    3. @Data
    4. public class DataBase {
    5. String url;
    6. String username;
    7. String password;
    8. }

SpingBoot 属性加载的更多相关文章

  1. 静态属性加载到jvm时候就存放在数据共享区,而不是等new后出现

    静态属性加载到jvm时候就存放在数据共享区,而不是等new后出现.他的生命周期是 jvm结束 才会消失,一般的方法属性是对象结束后 就会消失.

  2. Spring Boot的属性加载顺序

        伴随着团队的不断壮大,往往不需要开发人员知道测试或者生产环境的全部配置细节,比如数据库密码,帐号信息等.而是希望由运维或者指定的人员去维护配置信息,那么如果要修改某项配置信息,就不得不去修改项 ...

  3. SpringBoot 教程之属性加载详解

    免费Java高级资料需要自己领取,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G.            ...

  4. Entity Framework Core导航属性加载问题

    前言 今天下午在开发的时候发现EF Core实体模型中的导航属性为 null,经排查既不是没有加 virtual 关键字,也不是外键关系映射错误. 解决方法 通过查询官网文档,发现,原因在于EF Co ...

  5. 三 MyBatis配置文件SqlMapCofing.xml(属性加载&类型别名配置&映射文件加载)

    SqlMapCofing:dtd,属性加载有固定的顺序Content Model properties:加载属性文件 typeAliases:别名配置 1 定义单个别名:不区分大小写 核心配置: 映射 ...

  6. spring boot 使用属性加载顺序

    1.命令行中传入的参数 2.SPRING_APPLICATION_JSON中的属性.SPRING_APPLICATION_JSON是以JSON格式配置再系统环境变量中的内容 3.java:comp/e ...

  7. Entity Framework Core 导航属性 加载数据

    Loading Related Data https://docs.microsoft.com/en-us/ef/core/querying/related-data Eager loading me ...

  8. Springboot属性加载与覆盖优先级与SpringCloud Config Service配置

    参考官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config. ...

  9. 高性能Javascript--脚本的无阻塞加载策略

    Javascript在浏览器中的性能,可以说是前端开发者所要面对的最重要的可用性问题. 在Yahoo的Yslow23条规则当中,其中一条是将JS放在底部 .原因是,事实上,大多数浏览器使用单进程处理U ...

随机推荐

  1. 使用spring代码中控制事务

    1.首先需要在代码中注入事务管理器 @Autowired private PlatformTransactionManager transactionManager; 2.代码中使用如下 public ...

  2. <<君主论>>读后感

    “<君主论>与<圣经>齐名,被称为邪恶的圣经,这本书的立论基础是人性本恶论,他所描述的人性之恶,主要是以西欧资本原始积累背景下的现实社会中人的各种丑恶现象为蓝本的.” 要是高中 ...

  3. Solr Cloud

    bin/solr start -cloud -s example/cloud/node1/solr -p 8983 -z node13:2181,node14:2181,node15:2181/usr ...

  4. 在注册表中查看Windows10系统激活密钥的方法

      1 2 3 4 5 6 7 分步阅读 百度经验:jingyan.baidu.com 激活Windows10系统(非自己使用激活密钥激活的系统)以后,我们不一定清楚激活密钥是什么.如果想查看自己电脑 ...

  5. 关于c++的一篇随笔

    众所周知c++是一门极其深奥的学科,正因为其深奥之处,才会让人们觉得学习起来特别难.当然,我想说我自己也不例外,想起当初就像一场噩梦一样,直到今日还历历在目.尽管如此,c++还是一门相当有魅力的课程, ...

  6. 我的书单(Book List)

    code[class*="language-"], pre[class*="language-"] { background-color: #fdfdfd; - ...

  7. JAVA泛型实现原理

    1. Java范型时编译时技术,在运行时不包含范型信息,仅仅Class的实例中包含了类型参数的定义信息.泛型是通过java编译器的称为擦除(erasure)的前端处理来实现的.你可以(基本上就是)把它 ...

  8. Javascript高级编程学习笔记(72)—— 模拟事件(2)IE事件模拟

    IE中的事件模拟 低版本的IE浏览器作为前端开发的一股清流,想避过都不行 虽然低版本IE正在逐步被市场淘汰,不得不承认IE8以下的浏览器依然占了不小的份额 所以这里大概介绍IE8以下的低版本IE中的事 ...

  9. Javascript高级编程学习笔记(34)—— 客户端检测(3)用户代理检测

    用户代理检测 前面的文章介绍的是如何检测浏览器对某一功能的支持情况 但是在实践中我们有些时候免不了需要知道用户到底是用的什么浏览器对我们的站点进行访问 这也是统计用户行为的一部分 用户代理检测这种方式 ...

  10. Tomcat 的 server.xml 文件详解

    文件内容解读 <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apac ...