30 lines
1.7 KiB
Markdown
30 lines
1.7 KiB
Markdown
### 23.外化配置
|
||
|
||
Spring Boot允许外化(externalize)你的配置,这样你能够在不同的环境下使用相同的代码。你可以使用properties文件,YAML文件,环境变量和命令行参数来外化配置。使用@Value注解,可以直接将属性值注入到你的beans中,并通过Spring的Environment抽象或绑定到结构化对象来访问。
|
||
|
||
Spring Boot使用一个非常特别的PropertySource次序来允许对值进行合理的覆盖,需要以下面的次序考虑属性:
|
||
|
||
1. 命令行参数
|
||
2. 来自于java:comp/env的JNDI属性
|
||
3. Java系统属性(System.getProperties())
|
||
4. 操作系统环境变量
|
||
5. 只有在random.*里包含的属性会产生一个RandomValuePropertySource
|
||
6. 在打包的jar外的应用程序配置文件(application.properties,包含YAML和profile变量)
|
||
7. 在打包的jar内的应用程序配置文件(application.properties,包含YAML和profile变量)
|
||
8. 在@Configuration类上的@PropertySource注解
|
||
9. 默认属性(使用SpringApplication.setDefaultProperties指定)
|
||
|
||
下面是一个具体的示例(假设你开发一个使用name属性的@Component):
|
||
```java
|
||
import org.springframework.stereotype.*
|
||
import org.springframework.beans.factory.annotation.*
|
||
|
||
@Component
|
||
public class MyBean {
|
||
@Value("${name}")
|
||
private String name;
|
||
// ...
|
||
}
|
||
```
|
||
你可以将一个application.properties文件捆绑到jar内,用来提供一个合理的默认name属性值。当运行在生产环境时,可以在jar外提供一个application.properties文件来覆盖name属性。对于一次性的测试,你可以使用特定的命令行开关启动(比如,java -jar app.jar --name="Spring")。
|