spring_reference/IV. Spring Boot features/23. Externalized Configurat...

30 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

### 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")。