24.1配置随机值
RandomValuePropertySource 对于注入随机值(例如,进入秘密或测试用例)非常有用。它可以生成整数,长整数,uuids或字符串,如以下
示例所示:
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]}
random.int* 语法为 OPEN value (,max) CLOSE ,其中 OPEN,CLOSE 为任意字符, value,max 为整数。如果提供 max ,那么 value 是最小
值, max 是最大值(不包括)。
24.2访问命令行属性
默认情况下, SpringApplication 将任何命令行选项参数(即以 -- 开头的参数,例如 --server.port=9000 )转换为 property ,并将它们
添加到Spring Environment 。如前所述,命令行属性始终优先于其他属性源。
如果您不希望将命令行属性添加到 Environment ,则可以使用 SpringApplication.setAddCommandLineProperties(false) 禁用它们。
24.3应用程序Property文件
SpringApplication 从以下位置的 application.properties 文件加载属性,并将它们添加到Spring Environment :
1. 当前目录的 /config 子目录
2. 当前目录
3. classpath /config 包
4. 类路径根
列表按优先级排序(在列表中较高位置定义的属性将覆盖在较低位置中定义的属性)。
您还可以使用YAML('。mil')文件替代'.properties'。
如果您不喜欢 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 来确定必须加载哪些文件,因此必须将它们定义为环境属性(通
常是OS环境变量,系统属性或命令行参数)。
如果 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 选择的任何其他基本名称)中的某个默认位置为您的应用程序提供默认值。然后,可以在运行时使用位于其中一个自定
义位置的不同文件覆盖这些默认值。
如果使用环境变量而不是系统属性,则大多数操作系统都不允许使用句点分隔的键名称,但您可以使用下划线(例
如, SPRING_CONFIG_NAME 而不是 spring.config.name )。
如果应用程序在容器中运行,则可以使用JNDI属性(在 java:comp/env 中)或servlet上下文初始化参数来代替环境变量或系统属
性。