24.3 Application Property Files

SpringApplication从以下所示路径下的application.properties文件加载属性并将它们添加到Spring环境中:

  1. 当前目录下的/config子目录.
  2. 当前目录.
  3. 类路径下的/config目录
  4. 类路径根目录.

上述列表以优先级排序(属性定义在位置更高的将覆盖那些定义位置低的).

Note

您还可以使用YAML(‘.yml’)文件作为’.properties’的替代.

如果你不喜欢application.properties作为配置文件名称,您可以通过指定spring.config.name环境属性切换到另一文件名.你也可以使用spring.config.location环境属性指定一个明确的位置(这是一个以逗号分隔的目录位置或文件路径).下面的示例展示了如何指定不同的文件名:

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

下面的示例展示了如何指定两个位置:

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

Warning

spring.config.name和spring.config.location属性很早就用来确定哪些文件被加载,因此他们必须被定义为一个环境属性(通常是一个操作系统环境变量、一个系统属性或命令行参数).

如果spring.config.location位置包含目录(而不是文件),他们应该以/结束(在运行时,该属性的扩展名字来源于之前加载过的spring.config.name属性值,当然也包括profile-specific文件的文件名). 在spring.config.location中指定的文件将被原样使用,不支持profile-specific文件的变体并且将被在profile-specific配置的属性覆盖.

配置路径按相反的顺序搜索.默认情况下,配置路径为classpath:/,classpath:/config/,file:./,file:./config/.由此产生的搜索顺序如下:

  1. file:./config/
  2. file:./
  3. classpath:/config/
  4. classpath:/

当使用spring.config.location属性配置自定义路径位时,他们将替换默认的路径.例如,如果spring.config.location配置值为classpath:/custom-config/, file:./custom-config/,搜索顺序变成如下:

  1. file:./custom-config/
  2. classpath:custom-config/

或者,当使用spring.config.additional-location属性配置自定义路径时,他们将是默认路径的补充.例如,如果额外的路径配置为classpath:/custom-config/,file:./custom-config/,那么搜索顺序变成如下所示:

  1. file:./custom-config/
  2. classpath:custom-config/
  3. file:./config/
  4. file:./
  5. classpath:/config/
  6. classpath:/

这个搜索顺序允许您指定默认值在一个配置文件,然后在此有选择地覆盖这些值. 您可在你的任一默认路径下的application.properties提供您的应用程序默认值(或者其他任何在你选择的spring.config.name属性值文件中). 然后可在程序运行时,这些默认值可以被定义在任一的自定义路径下的属性所覆盖.

Note

如果你使用环境变量而不是系统属性,大多数操作系统不允许分割关键字名字,但你可以用下划线代替(例如,SPRING_CONFIG_NAME代替spring.config.name).

Note

如果您的应用程序运行在一个容器,那么JNDI属性(在java:comp/env)或servlet上下文初始化参数可以代替使用,或者环境变量或系统属性也可使用.