SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
application.properties语法结构 : key=value
application.yml语法结构 :key:空格 value
SpringBoot在底层都给我们自动配置好了,我们可以编写配置文件来修改SpringBoot自动配置的默认值
yml语法要求严格,注意空格不能省略,注意层级关系,属性和值的大小写都十分敏感
name: lisi
字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号,注意“ ” 双引号不会转义字符串里面的特殊字符,’’ 单引号会转义特殊字符
对象,Map
student:
name: lisi
age: 20
行类写法
student: {name: lisi,age: 20}
数组(List,Set)
pets:
-cat
-dog
-pig
行类写法
pets: [cat,dog,pig]
yaml文件可以给我们的实体类直接注入匹配值
新建实体类Dog,我们用@Value给ben注入属性值
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Dog {
@Value("阿黄")
private String name;
@Value("5")
private Integer age;
}
SpringBoot的测试类
@SpringBootTest
class SpringBoot01ApplicationTests {
@Autowired
Dog dog;
@Test
void contextLoads() {
System.out.println(dog);
}
}
再来一个Person类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
在springboot项目中的resources目录下新建一个application.yml,现在用yaml配置的方式进行注入
person:
name: lisi
age: 20
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
-code
-girl
-music
dog:
name: 旺财
age: 3
在Person类中与其属性绑定,@configurationProperties:默认从全局配置文件中获取值
@ConfigurationProperties(prefix = "person")
这时IDEA 提示,springboot配置注解处理器没有找到,在Maven中添加下面依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
配置文件进行绑定就会有提示需要重启
测试
@SpringBootTest
class SpringBoot01ApplicationTests {
@Autowired
Dog dog;
@Autowired
Person person;
@Test
void contextLoads() {
System.out.println(dog);
System.out.println(person);
}
}
可以看到所有值都注入成功了
配置文件占位符
person:
name: wangwu${random.uuid}
age: ${random.int}
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: ${person.hello:other}_旺财
age: 1
我们再来看看之前常用的properties,properties配置文件在写中文的时候,会有乱码,需要去IDEA中设置编码格式为UTF-8
新建实体类User
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class User {
private String name;
private int age;
private String sex;
}
编写配置文件user.properties
user.name=wangwu
user.age=18
user.sex=男
注入属性值
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@PropertySource(value = "classpath:user.properties")
public class User {
@Value("${user.name}")
private String name;
@Value("#{9*2}")
private int age;
@Value("男")
private String sex;
}
测试
@SpringBootTest
class DemoApplicationTests {
@Autowired
User user;
@Test
public void contextLoads() {
System.out.println(user);
}
}
配置yml和配置properties都可以获取到值 , 强烈推荐 yml
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value
如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties