可以使用属性文件,YAML文件,环境变量和命令行参数来外部化配置
一、属性值可以直接注入到bean
系统属性值不可以
// application.properties
name=xiaoming
server.port=80
import org.springframework.stereotype.*;
import org.springframework.beans.factory.annotation.*;
@Component
public class MyBean {
@Value("${name}")
private String name;
@Value("${server.port}") // 不可以
private String name;
// ...
}
二、属性作为参数应用
文档: 24.5 Placeholders in Properties
server.port=80
# 自定义属性
xm.name=xiaoming
xm.gener=man
xm.reference=Name:${xm.name},Gener:${xm.gener},${server.port} // 系统属性貌似不可以
三、配置随机数(Configuring Random Values)
四、通过命令行设置属性值(Accessing Command Line Properties)
可以禁用
SpringApplication.setAddCommandLineProperties(false)
五、多环境配置
通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包
六、关于自定义配置文件
- 自定义配置
peron:
lastName: xiaoming
last: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: v2}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 2
- 使用注解映射属性的值
@Component
@ConfigurationProperties("person")
public class Person {
private String lastName;
private Integer age;
...
}
- 声明依赖 (见附录B)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- 主程序类启用
@EnableConfigurationProperties
注解
@SpringBootApplication
@EnableConfigurationProperties
public class HelloWorldMainApplication {
...
}
参考
- 文档: 24.3 Application Property Files
- 附录B.配置元数据: B.3 Generating Your Own Metadata by Using the Annotation Processor
七、YAML
不可以使用 @PropertySource注解来加载, 只能加载properties文件