### 一般把 resource 文件夹下面的 application.properties 改成 application.yml
1. 修改端口号为 9528
server:
port: 9528
2. 端口后面还学要额外的添加字符串
server:
port: 9528
servlet:
context-path: /zed
3. 指定激活 profile
server:
port: 9528
spring:
profiles: prod
---
server:
port: 9530
spring:
profiles: dev
---
spring:
profiles:
active: prod
可以指定 spring.profiles.active = prod 表示整个项目使用 prod 这个端口号为 9528 的这一套环境
4. yml语法
4.1 对于字符串的值,直接写和加上单引号是一样的效果的都表示原样输出,如果要做特殊处理比如 \n 换行的话,可以加双引号。
4.2 对象,map 的书写:
对象是 k:v 的形式
friends:
lastName: zhangsan
age: 20
行内写法:
friends: {lastName: zhangsan, age: 18}
4.2 数组的写法
使用 - 表示一个数组的元素
pets:
- cat
- dog
- pig
行内写法
pets: [cat, dog, pig]
5. 配置文件的注入
5.1 单值注入
yml文件配置
person:
name: "zhangsan \n lisi"
age: 23
boss: true
birth: 2018/12/01
对应的注入 代码
@RestController
public class HelloController {
// 单值注入
@Value("${person.name}")
private String name;
@GetMapping("/hello")
public String hello(){
System.out.println(name);
return name;
}
}
因为是加了双引号所以打印出:
zhangsan
lisi
5.2 批量注入
yml配置
person:
lastName: 大汤圆
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1, k2: 12}
lists:
- 张三
- 李四
dog:
name: 小奶狗
age: 2
实体类
//封装配置文件中person中的数据
@ConfigurationProperties(prefix = "person")
@Component
@Data
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<String> lists;
private Dog dog;
}
这边要注意的是当我们加上这个批量注解 @ConfigurationProperties(prefix = "person") 就是会有一个提示提示报错,所以需到pom.xml进行配置:
<!-- 添加依赖 在使用 @ConfigurationProperties(prefix = "animals") 注入的时候会报错 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
依赖的 Dog 类
@Data
public class Dog {
private String name;
private Integer age;
}
最后的运行测试类
@RestController
public class HelloController {
// 拿到容器里面 perosn 对象
@Autowired
private Person person;
@GetMapping("/hello")
public String hello(){
System.out.println(person.toString());
return person.toString();
}
}
需要注意的是:
@Component 当前的配置类放入IOC容器中
@Autowired 从容器中拿到 @Component 存入到容器的 配置类
- 如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
- 如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
6. 注入校验
@ConfigurationProperties(prefix = "person")
@Component
@Data
@Validated //数据校验
public class Person {
@Email(message = "用户名必须是一个正确的邮箱格式")
private String lastName;
@Max(value = 200,message = "年龄不能超过200岁")
@Min(value = 0,message = "年龄必须大于0岁")
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<String> lists;
private Dog dog;
}