SpringBoot使用一个全局的配置文件,配置文件名application是固定的;
- application.properties:配置端口则输入:
server.port=8081
- application.yml
1.配置文件的作用:
修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
2.YAML–标记语言
对比XML,以数据为中心,更适合做配置文件
例子:
YAML
server:
port:8081
XML:
<server>
<port>8081</port>
</server>
3.配置文件注入
第一种 `@ConfigurationProperties
: Spring Boot的注解,专门编写了一个javabean来和配置文件(**.properties 文件或者.yml文件**)进行映射。 默认从全局文件(**Application.properties文件**)获取,如果想从指定文件中读取,可以使用
@PropertySource()`注解,如:
@ConfigurationProperties(prefix = "person")
@PropertySource(value = "classpath:person.properties")
例子:
在BEAN里
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
在配置文件中,此处为yml
person:
lastName : zhangsan
age: 36
测试类,输出映射的bean中的内容
@SpringBootTest
public class WebApplicationTests {
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
第二种.@value
:
系Spring的注解,用于只在某个业务逻辑中需要获取配置文件中的某项值,可赋值
@Component
public class Person {
@Value("${person.lastName}")
private String lastName;
@Value("#{11*2}")
private Integer age;
两种方法的对比
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
松散绑定:
例如Person中有lastName属性,在配置文件中可以写成
lastName或lastname或last-name或last_name等等
JSR303 数据校验 :
需要导入hibernate validator的MAVEN包使用,并且在bean或controller加上@Validated
注解,在变量声明前加@Email
等注解校验
如:
@Validated
public class Person {
@Email
private String lastName;
4. 配置文件占位符
随机数
${random.int}
占位符
可以引用在配置文件中配置的其他属性的值,如果使用一个没有在配置文件中的属性,则会原样输出
- cat.name=${cat.load:kitty}:
如cat.name=${cat.load} 输出
cat{name='${cat.load}'}
如cat.name=${cat.load:kitty}时输出
cat{name='kitty'}