属性加载顺序

配置属性加载的顺序

  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. 别人的Linux私房菜(18)认识系统服务(daemon)

    完成服务service的程序称为daemon.完成计划性的服务程序如crond是一个daemon. 早期的System V的init管理daemon操作中,系统内核首先调用init,然后init运行系 ...

  2. C重新入门

    推荐书籍:<C专家编程>.<C和指针>.<C陷阱与缺陷> <C专家编程>参看:http://www.ituring.com.cn/article/274 ...

  3. web应用/路由控制/视图函数/单表多表操作

    一. 1.wen应用:BS架构的应用程序,B是浏览器,S:server(实现了wsgi协议)+ application https://www.cnblogs.com/liuqingzheng/art ...

  4. flex弹性盒子布局

    一.在需要使用弹性盒子的容器上添加属性:display:flex 或者 display:inline-flex; 二.在父容器上添加flex-direction设置子元素主轴方向: 不写默认值是X轴从 ...

  5. 常见的js dom操作

    1.查找  document.getElementById('id属性值');  返回拥有指定id的第一个对象的引用  document/element.getElementsByClassName( ...

  6. 2019.03.25 bzoj4568: [Scoi2016]幸运数字(倍增+线性基)

    传送门 题意:给你一棵带点权的树,多次询问路径的最大异或和. 思路: 线性基上树?? 倍增维护一下就完了. 时间复杂度O(nlog3n)O(nlog^3n)O(nlog3n) 代码: #include ...

  7. leetcode - valid number 正则表达式解法

    import java.util.regex.Pattern; public class Solution { Pattern p = Pattern.compile("^[\\+\\-]? ...

  8. spring mvc 扩展 标签解析

    spring mvc 标签解析 InterceptorsBeanDefinitionParser http://www.cnblogs.com/fangjian0423/p/springMVC-int ...

  9. Exp8 Web基础 20154320 李超

    1.实验后回答问题 (1)什么是表单. 表单是一个包含表单元素的区域,表单元素是允许用户在表单中输入信息的元素,表单在网页中主要负责数据采集功能,一个表单有三个基本组成部分:表单标签.表单域.表单按钮 ...

  10. cookie httpOnly 打勾

    在 chrome dev tools 中,通过 Application -> Cookies 可以查看 cookie. 其中有一列表头为`HTTP`,如果其下打勾了,则表明 httpOnly. ...