Spring Cloud配置参数优先级

优先级高的将会覆盖优先级低的,Spring Cloud按优先级从高到低查找配置参数,找到后就立即返回。配置参数优先级从高到低分别为:

  1. 配置中心仓库(Git或SVN)/searchPaths配置的子目录/{application}-{profile}.properties
  2. 配置中心仓库(Git或SVN)/{application}-{profile}.properties
  3. 配置中心仓库(Git或SVN)/searchPaths配置的子目录/{application}.properties
  4. 配置中心仓库(Git或SVN)/{application}.properties
  5. commandLineArgs(命令行参数,通过--设置,必须在-jar xxx.jar之后,如:java -jar xxx.jar --source=xxx)
  6. systemProperties(系统属性,通过-D设置,必须在-jar xxx.jar之前,如:java -Dsource=xxx -jar xxx.jar)
  7. systemEnvironment(环境变量)
  8. 命令行参数--spring.config.location配置的目录(目录名称必须以/结尾)/application-{profile}.properties
  9. 当前目录(执行java -jar命令所在目录)/config/application-{profile}.properties
  10. 当前目录(执行java -jar命令所在目录)/application-{profile}.properties
  11. classpath:/config/application-{profile}.properties
  12. classpath:/application-{profile}.properties
  13. 命令行参数--spring.config.location配置的目录(目录名称必须以/结尾)/application.properties
  14. 当前目录(执行java -jar命令所在目录)/config/application.properties
  15. 当前目录(执行java -jar命令所在目录)/application.properties
  16. classpath:/config/application.properties
  17. classpath:/application.properties
  18. 命令行参数--spring.config.location配置的目录(目录名称必须以/结尾)/bootstrap-{profile}.properties
  19. 当前目录(执行java -jar命令所在目录)/config/bootstrap-{profile}.properties
  20. 当前目录(执行java -jar命令所在目录)/bootstrap-{profile}.properties
  21. classpath:/config/bootstrap-{profile}.properties
  22. classpath:/bootstrap-{profile}.properties
  23. 命令行参数--spring.config.location配置的目录(目录名称必须以/结尾)/bootstrap.properties
  24. 当前目录(执行java -jar命令所在目录)/config/bootstrap.properties
  25. 当前目录(执行java -jar命令所在目录)/bootstrap.properties
  26. classpath:/config/bootstrap.properties
  27. classpath:/bootstrap.properties

激活的{profile}配置文件(比如:xxx-dev.properties)比默认配置文件(比如:xxx.properties)优先级高。

其中{application}是由spring.application.name配置的,{profile}是由spring.profiles.active配置的,如果spring.profiles.active配置了多个{profile}(用英文逗号分隔),则{profile}从右到左优先级从高到低排序。

如果配置服务器searchPaths配置了多个子目录,配置的子目录从右到左优先级从高到低排序。

本地目录优先级从高到低分别为:

  1. 命令行参数--spring.config.location配置的目录(目录名称必须以/结尾)
  2. 当前目录(执行java -jar命令所在目录)/config/
  3. 当前目录(执行java -jar命令所在目录)/
  4. classpath:/config/
  5. classpath:/

先按目录优先级在所有指定的目录中查找{profile}第一优先级的配置文件,然后再按目录优先级在所有指定的目录中查找{profile}第二优先级的配置文件,以此类推,最后,按目录优先级在所有指定的目录中查找默认配置文件。

假设spring.application.name配置的是myproject,spring.profiles.active配置的是dev,test,searchPaths配置的是aaa,bbb,命令行参数--spring.config.location配置的目录是/home/work/ccc/,当前目录(执行java -jar命令所在目录)是/home/work/ddd/,则优先级从高到低分别为:

  1. 配置中心仓库(Git或SVN)/bbb/myproject-test.properties
  2. 配置中心仓库(Git或SVN)/aaa/myproject-test.properties
  3. 配置中心仓库(Git或SVN)/myproject-test.properties
  4. 配置中心仓库(Git或SVN)/bbb/myproject-dev.properties
  5. 配置中心仓库(Git或SVN)/aaa/myproject-dev.properties
  6. 配置中心仓库(Git或SVN)/myproject-dev.properties
  7. 配置中心仓库(Git或SVN)/bbb/myproject.properties
  8. 配置中心仓库(Git或SVN)/aaa/myproject.properties
  9. 配置中心仓库(Git或SVN)/myproject.properties
  10. commandLineArgs(命令行参数)
  11. systemProperties(系统属性)
  12. systemEnvironment(环境变量)
  13. /home/work/ccc/application-test.properties
  14. /home/work/ddd/config/application-test.properties
  15. /home/work/ddd/application-test.properties
  16. classpath:/config/application-test.properties
  17. classpath:/application-test.properties
  18. /home/work/ccc/application-dev.properties
  19. /home/work/ddd/config/application-dev.properties
  20. /home/work/ddd/application-dev.properties
  21. classpath:/config/application-dev.properties
  22. classpath:/application-dev.properties
  23. /home/work/ccc/application.properties
  24. /home/work/ddd/config/application.properties
  25. /home/work/ddd/application.properties
  26. classpath:/config/application.properties
  27. classpath:/application.properties
  28. /home/work/ccc/bootstrap-test.properties
  29. /home/work/ddd/config/bootstrap-test.properties
  30. /home/work/ddd/bootstrap-test.properties
  31. classpath:/config/bootstrap-test.properties
  32. classpath:/bootstrap-test.properties
  33. /home/work/ccc/bootstrap-dev.properties
  34. /home/work/ddd/config/bootstrap-dev.properties
  35. /home/work/ddd/bootstrap-dev.properties
  36. classpath:/config/bootstrap-dev.properties
  37. classpath:/bootstrap-dev.properties
  38. /home/work/ccc/bootstrap.properties
  39. /home/work/ddd/config/bootstrap.properties
  40. /home/work/ddd/bootstrap.properties
  41. classpath:/config/bootstrap.properties
  42. classpath:/bootstrap.properties

bootstrap[-{profile}].properties比application[-{profile}].properties先加载,配置中心客户端的spring.cloud.config开头的参数必须放在bootstrap[-{profile}].properties中,不能放在application[-{profile}].properties中,因为配置中心的配置要比application[-{profile}].properties先加载。

如果bootstrap.properties、bootstrap-{profile}.properties、application[-{profile}].properties都配置了spring.profiles.active参数,则配置中心的{profile}使用bootstrap.properties中的spring.profiles.active参数,本地项目的{profile}使用bootstrap.properties和bootstrap-{profile}.properties中的spring.profiles.active参数之和,在程序中通过Environment.getProperty("spring.profiles.active")获取的是application[-{profile}].properties中的spring.profiles.active参数。

如果不用Spring Cloud,只用Spring Boot,则bootstrap[-{profile}].properties不会加载和生效,只有依赖了spring-cloud-context的jar包才会加载bootstrap[-{profile}].properties

Spring Cloud使用Edgware.SR3版本,Spring Boot使用1.5.13.RELEASE版本

标签: Spring Cloud配置参数优先级

添加新评论