属性加载顺序

配置属性加载的顺序

  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的方式
      @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>  
  1. 通过 springboot 扩展方式:
    @Bean
    public CommandLineRunner commandLineRunner() {
    return (args) -> {
    System.setProperty("name", "demo");
    };
    }
  2. 通过 @PropertySource 配置

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

属性获取方式

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

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. easyui_validatebox常用验证

    $.extend($.fn.validatebox.defaults.rules, { idcard: {// 验证身份证 validator: function (value) { return / ...

  2. 循环调用dll库的界面时,首次正常,再次无响应

    消息循环错误: 在为使用CPaintManagerUI::MessageLoop()的情况下退出,但却发送了PostQuitMessage(0).

  3. 直播流RTMP 知识

    分享直播相关知识点: http://blog.csdn.net/kingroc/article/details/50839994 #!/bin/bash# Order Finish Startup# ...

  4. Python开发——8.模块

    一.模块 1.模块 (1)定义:一个.py文件就是一个模块 (2)原因:为了防止程序代码越来越长,对函数进行分组放到不同的文件夹里. (3)优点:提高代码的可维护性:模块编写完毕可以被别人引用,也可以 ...

  5. KITTI数据集的使用——雷达与相机的数据融合

    目录 目的 如何实现 kitti数据集简介 kitti数据集的raw_data 利用kitti提供的devkit以及相应数据集的calib文件 解读calib文件夹 解读devkit 目的 使用雷达点 ...

  6. 《java多线程编程核心技术》(一)使用多线程

    了解多线程 进程和多线程的概念和线程的优点: 提及多线程技术,不得不提及"进程"这个概念.百度百科对"进程"的解释如下: 进程(Process)是计算机中的程序 ...

  7. 关于CSS层叠机制

    谈到层叠机制,首先我们要知道什么是声明冲突. 声明冲突有三个条件:①多个选择器选中同一个元素:②声明块里的属性相同:③属性的属性值不同.同时满足这三点时就会产生声明冲突.比如下图html代码: < ...

  8. C++的IO处理中的头文件以及类理解(1)

    C++语言不直接处理输入输出,而是通过一簇定义在标准库中的类型来处理IO.这些类型支持从设备读取数据.向设备写入数据的IO操作,设备可以是文件.控制台窗口等,还有一些类型允许内存IO,即,从strin ...

  9. SQL Server Integration Services SSIS最佳实践

    SQL Server Integration Services Best Practices Tips https://www.mssqltips.com/sql-server-tip-categor ...

  10. 3-Fiddler修改请求或响应内容

    1.修改请求内容 方法一:设置请求前断点,修改请求后发送 1)设置断点 2)选中请求,在inspectors下修改请求内容 3)修改请求后,点击Break on Response按钮,进行请求的发送 ...