Spring boot 配置类与配置文件详解( 二 )

  • 默认属性(通过设置SpringApplication.setDefaultProperties指定)
  • 下面举个例子,假如你开发了一个使用name属性的@component,如下例所示:
    @Component public class ComBean { @Value("${name}") private String name; }在应用程序classpath路径(例如,在JAR中)上,可以有一个application.properties文件,该文件为name提供了一个合理的默认属性值 。在新环境中运行时,可以在jar外部提供application.properties文件来覆盖name 属性 。对于一次性测试,您可以使用特定的命令行开关(例如java –jar app.jar --name=”String”)启动 。
    在前面的示例中,您将在Spring环境中得到name=test 。您还可以在系统属性中以spring.application.json的形式提供json,如下例所示:
    java -Dspring.application.json='{"name":"test"}' -jar myapp.jar
    还可以使用命令行参数提供JSON,如下例所示:
    java -jar myapp.jar --spring.application.json='{"name":"test"}'
    RandomValuePropertySource配置随机数
    RandomValuePropertySource对于生产注入随机值(例如,到机密或测试用例中)很有用 。它可以生成整数、long、uuid或字符串,如下例所示:
    my.secret=${random.value}my.number=${random.int}my.bignumber=${random.long}my.uuid=${random.uuid}my.number.less.than.ten=${random.int(10)}my.number.in.range=${random.int[1024,65536]} 访问命令行参数
    默认情况下,SpringApplication会将任何命令行选项参数(即以-开头的参数,例如--server.port=9000)转换为属性,并将其添加到Spring环境中 。如前所述,命令行属性总是优先于其他属性源 。
    如果不希望将命令行属性添加到环境中,可以使用
    SpringApplication.setAddCommandLineProperties(false)Application 属性文件SpringApplication从以下位置的application.properties文件加载属性,并将其添加到Spring环境中:
    1. 当前目录的 /config 子目录
    2. 当前目录
    3. classpath 的 /config 包
    4. classpath 的根目录
    3 和 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.location包含目录(与文件相反),那么它们应该以/结尾,并且在运行时,在加载之前,附加从spring.config.name生成的名称,包括特定文件的文件名) 。spring.config.location中指定的文件按原样使用,不支持特定于概要文件的变量,并且被任何特定于概要文件的属性覆盖 。
    按相反的顺序搜索配置位置 。默认情况下,配置的位置为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选择的任何其他基名称)中为应用程序提供默认值 。然后,可以在运行时使用位于其中一个自定义位置的其他文件覆盖这些默认值 。
    Profile-specific Properties
    除了application.properties文件外,还可以使用以下命名约定定义特定于文件的属性:application-{profile}.properties 。环境有一组默认配置文件(默认情况下为[default]),如果未设置活动配置文件,则使用这些默认配置文件 。换句话说,如果没有显式激活配置文件,那么将加载application-default.properties中的属性 。


    推荐阅读