Spring boot 外部属性配置

/ 默认分类 / 2 条评论 / 370浏览

####访问命令行属性 默认情况下,spring boot 应用会把命令行中任何以--开头的可选参数(例如:--server.port=9000)转换成属性并将其加入到 spring Environment 中。通过命令行配置的属性的优先级往往高于其他方式配置的的属性的优先级。 ####spring boot 中的属性文件 spring boot 应用程序总是读取 application.properties 文件中配置的路径下的属性(具体路径如下表),并把它们加载到 Spring Environment 中:

描述
1当前目录下名为config的子目录
2当前目录
3类路径下名为config的包
4类路径的根目录

上述列表从上往下优先级依次降低(更高优先级目录定义的配置覆盖较低优先级的属性)

如果不想使用application.properties作为配置文件的名称,可以通过指定 spring.config.name 环境属性来更改其配置名。同时,也可以使用 spring.config.location 属性来指定一个给定的路径(多个目录或文件路径可以通过逗号来分隔)

$ java -jar myproject.jar --spring.config.name=myproject

或者

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

spring.config.name 和 spring.config.location 这两个属性在程序启动的非常前期的阶段决定程序要去加载那些配置文件,所以被设置为环境属性(environment property)(通常地,环境属性还指 操作系统环境、系统属性和命令行参数)

如果 spring.config.location 属性的值包含目录(相对于文件来说),则应该以 / 结尾,并且该属性在加载之前会在末尾追加上 spring.config.name 配置的配置文件名(包括指定的配置文件名)。在 spring.config.location 属性中指定的文件不支持 profile-specific 变量,应当原样使用,并且会被 profile-specific 的属性覆盖。

配置路径的搜索是反序的,通常情况下,配置的路径是:classpath:/,classpath:/config/,file:./,file:./config/,而配置搜索的路径顺序是

搜索路径
1file:./config/
2file:./
3classpath:/config/
4classpath:/

当自定义的配置路径指定后,除了默认的路径,自定义的也将被使用。自定义路径在默认路径之前被搜索。例如,我们添加了 classpath:/custom-config/,file:./custom-config/ 这两个路径,搜索路径则会变为

搜索路径
1file:./custom-config/
2classpath:custom-config/
3file:./config/
4file:./
5classpath:/config/
6classpath:/

这个搜索顺序允许我们在一个配置文件中指定默认值,并且在其他配置文件中有选择性的覆盖这些默认值。我们可以在默认路径中的 application.properties 文件或者通过 spring.config.name 指定的配置文件中设置默认值。这些默认值将在运行时被自定义路径中的配置文件覆盖。 注意:如果使用的是环境变量而不是系统属性,大多数操作系统不允许点分的键名,此时可以用下划线代替(例如用SPRING_CONFIG_NAME代替spring.config.name)

  1. klashdflskadhlk

    回复
  2. ssd

    asdsadadfs

    回复