一般我们会将SpringBoot应用需要的配置内容放在项目工程中,然后通过spring.profiles.active或是通过Maven来实现多环境的支持.但是,当团队逐渐壮大,分工越来越细之后,往往不需要让开发人员知道测试或生产环境的细节,而是希望由每个环境各自的负责人(QA或运维)来集中维护这些信息,那么如果还是以则海洋的方式存储配置内容,对于不同环境配置的修改就不得不去获取工程内容来修改这些配置内容,当应用非常多的时候就变得非常不方便.同时,配置内容对开发人员都可见,这本身也是一种安全隐患.对此,出现了很多将配置内容外部化的框架和工具,Spring Cloud Config就是其中之一.为了能够更合理的重写各个属性的值,SpringBoot使用下面的顺序来加载配置:

.在命令行中传入的参数;

.SPRING_APPLICATION_JSON 中的属性。SPRING_APPLICATION_JSON 是以JSON 格式配置在系统环境变量中的内容;

.java:comp/env 中的 JNDI 属性;

.java 的系统属性,可以通过System.getProperties()获得的内容;

.操作系统的环境变量。

.通过random.*配置的随机属性;

.位于当前应用jar包之外,针对不同{profile}环境的配置文件内容,例如 applicaiton-{profile}.properties 或是 yaml 定义的配置文件;

.位于当前应用jar包之内,针对不同{profile}环境的配置文件内容,例如 applicaiton-{profile}.properites 或是 yaml 定义的配置文件;

.位于当前应用jar包之外的 application.properties 和yaml配置内容;

.位于当前应用jar包之内的 application.properties 和yaml配置内容;

.在@Configration注解修改的类中,通过@PropertySource注解定义的属性;

.应用默认属性,使用SpringApplication.setDefaultProperties定义的内容;

优先级按照上面的顺序由高到低,数字越小优先级越高。

可以看到,第7项到第9项都是从应用jar包之外读取配置文件,所以,实现外部化配置的原理就是从此切入,为其指定外部配置文件的加载位置来取代jar包之内的配置内容。通过这样的实现,我们的工程在配置中就变得非常干净,只需在本地放置开发需要的配置即可,而不需要其他环境的配置,由其对应环境的负责人去维护即可。

最新文章

  1. Docker - Install docker on CentOS
  2. Delphi 中同类型方法的说明
  3. 二叉树遍历(Binary Tree Traversal)
  4. datetime.timedelta
  5. 微信小程序 网络请求之设置合法域名
  6. Java 子类 instanceof 父类
  7. C++标准库第二版笔记 1
  8. eclipse项目环境搭建(做了好多遍,老是忘记,以此文帮助记忆)
  9. 怎么删除Elasticsearch里的index内容
  10. 【流媒体】UPnP的工作过程
  11. [异常记录-13]Web Deploy发布:An error occurred when the request was processed on the remote computer
  12. 【计算机视觉】交并比IOU概念理解
  13. 20181113-3 Beta阶段贡献分配规则
  14. ShadowVolume
  15. shell语句
  16. 8、SpringBoot-CRUD默认访问的首页以及thyleaf的静态文件引入/WebMvcConfigurer / WebMvcConfigurationSupport
  17. hash & heap - 20181023 - 20181026
  18. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its 错误解决办法
  19. 文本生成器(bzoj 1030)
  20. java中通用权限管理设计(转)

热门文章

  1. 矩阵迹 tr(AB)=tr(BA)的证明
  2. Java精通并发-锁升级与偏向锁深入解析
  3. 请解释下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系
  4. 忘记 MySQL 的 root 帐号密码该怎么办
  5. Mybatis控制台打印SQL语句的两种方式
  6. machine learning (4)---feature scaling
  7. JAVA BIO至NIO演进
  8. django使用redis
  9. neo4j安装部署
  10. TPS与QPS,以及GMV