属性加载顺序

配置属性加载的顺序

  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. C重新入门

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

  2. go的基本数据类型

    一,数据类型的介绍 在go语言中,数据类型是用于声明函数和变量的:数据类型是为了把数据分成所需内存不同大小的数据,除了在需要使用大数据的时候才会申请大内存,这样就会充分的使用内存 Go 语言按类别有以 ...

  3. Hibernate框架:CRM练习--保存客户

    crm:customer ralation manager 客户关系管理系统 一.准备 1.创建web项目 2.导包 最终为: 3.引入静态页面 将文件复制放入项目的WebContent目录下面: 4 ...

  4. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on project taotao-manager-pojo: Compilation failure

    运行maven项目时报错 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compi ...

  5. 阿里云 ECS centos java timer进程异常/混乱......的解决方法

    之前就知道timer进程长久运行容易出问题,所以一直对timer进行了很长一段时间的日志监控和数据库记录,大概观察了几个月,没发现过问题....然后就没管理了,数据库记录也没做了,昨天这问题就来了,t ...

  6. 解决:Adobe Acrobat Pro中设置背景颜色后,出现白色条纹

    找到  编辑->首选项->页面显示->渲染->使用2D图形加速 取消即可

  7. 底图与蒙版的过渡效果transition

    我用2种方法写了底图与蒙版的过渡效果 方法一:用js方法 <!DOCTYPE html> <html> <head> <meta http-equiv=&qu ...

  8. HDU 2147 P/N博弈

    点这里去做题 如图 找必胜点和必败点, 1.终点为必胜点 2.所有能一步走到必胜点的都是必败点 3.每一步都只能走到必败点的是必胜点 #include<bits/stdc++.h> usi ...

  9. 大众点评selfxss结合两个csrf变废为宝(已修复,故公开,不涉及真实参数)

    大众点评selfxss结合两个csrf变废为宝 漏洞不值钱,但还是蛮好玩的 漏洞信息 类型:存储型xss 场景:收藏商户后,去已收藏的商户列表可以给指定商户添加tag(与下文html标签区别) 漏洞限 ...

  10. Redis和memcached缓存技术

    缓存的定义:缓存就是在内存中存储的数据备份,当数据没有发生本质变化的时候,我们避免数据的查询操作直接连接数据库,而是去    内容中读取数据,这样就大大降低了数据库的读写次数,而且从内存中读数据的速度 ...