Spring Boot学习笔记(2)——SpringBoot核心配置(yml/properties 文件)
SpringBoot的配置文件
1、Spring Boot 使用一个全局配置文件,放置在 src/main/resources 目录或 类路径的 /config 下,命名固定,为:
application.properties 或者 application.yml
2、配置文件的作用:修改 Spring Boot 自动配置的默认值,例如:修改springboot项目的启动的默认端口:
application.properties文件中:
server.port=8088
application.yml文件中:
#修改springboot项目启动的默认端口号,也可以在 application.yml 文件中修改,当 properties文件和yml文件同时存在时,优先起效果的时properties文件中的配置
server:
port: 8089
3、yml不是一个标记语言,标记语言是spring以前的配置文件,大多是xxxx.xml,yml使用的是YAML,以数据为中心,配置数据的时候具有面向对象的特征;比 json、xml 等更适合做配置文件
YAML语法格式
1、使用key: value的形式来表示一组键值对(注意:冒号后面必须要有空格)
2、使用空格缩进来表示层级关系,并且缩进的空格数不重要,但是同一层级下的元素,缩进的空格数必须一直
3、key和value的书写大小写敏感
4、YMAL常用写法:
1)、value可以是数值,字符串,布尔,日期,对象…
2)、当value是字符串时,默认不需要加上引号,但是如果value中有特殊字符,则需要加上双引号,如:name: “mengxuegu \n jiaoyu” 输出: mengxuegu 换行 jiaoyu
name: 'mengxuegu \n jiaoyu 输出: mengxuegu \n jiaoyu
3)、yml文件定义对象:
emp:
lastName: xiaomeng
age: 22
salary: 10000
#或者
emp: {lastName: xiaomeng, age: 22, salary: 10000}
4)、yml文件定义list
fortes:
- java
- python
- hadoop
#或者
fortes: [java, python, hadoop]
yaml 配置文件向javaBean注入值
1、编写javaBean
public class Forte {
private String name;
private Integer time;
getter/setter……
}
/**
* 1、@Component 表示将当前类作为一个sping的组件,提供给spring使用
* 2、@ConfigurationProperties 告诉springboot,将 properties/yml 配置文件中的对应属性的值,映射到这个组件类中,与类中的属性进行一一绑定
* prefix = "emp" 表示将配置文件中 前缀明为 emp 的属性来与这个类中进行映射
* @author asong
*
*/
@Component
@ConfigurationProperties(prefix = "emp")
public class Emp {
private String lastName;
private Integer age;
private Double salary;
private Boolean boss;
private Date birthday;
private Map<String, Object> map;
private List<String> list;
private Forte forte;
private List<Forte> forteList;
getter/setter……
}
2、编写application.yml文件(注意同一级元素左侧缩进的空格数相同)
emp:
lastName: 张三
age: 28
salary: 20000
boss: true
birthday: 1991/1/1
map:
key1: value1
key2: value2
list:
- one
- two
- three
forte:
name: java
time: 8
forteList:
- name: python
time: 3
- name: C++
time: 4
3、使用application.properties文件注入值(与第2点功能一样,只需一个即可)
#\u674E\u56DB:李四
emp.lastName=\u674E\u56DB
emp.age=30
emp.salary=10000
emp.boss=false
emp.birthday=2000/10/10
emp.map.key1=value1
emp.map.key2=value2
emp.list=1,2,3
emp.forte.name=java
emp.forte.time=10
emp.forteList[0].name=phthon
emp.forteList[0].time=10
emp.forteList[1].name=C++
emp.forteList[1].time=20
4、使用springboot的单元测试,运行即可发现Emp 对象中的各个属性注入了配置文件中配置的值
使用@Value注解向JavaBean注入值
1、可以使用spring的@Value注解向类中的属性注入配置文件中的值
@Value("${emp.last-name}")
private String lastName;
@Value("#{10*2}")
private Integer age;
@Value("8000")
private Double salary;
2、@Value注解和@ConfigurationProperties注解功能有异同,具体如下:
3、JSR303数据校验_配置文件注入的值,例如:
校验是否为合法的邮箱地址:
1)、在Emp类上加上一个 @Validated 注解
2)、在listName属性上添加 @Email 注解,表示对注入的lastName的值进行email的校验,看是符合邮箱的格式
3)、当使用 @ConfigurationProperties(prefix = “emp”) 注解来注入值时,测试项目会报错,因为从配置文件中注入的lastName的值不符合邮箱格式
4)、当使用@Value注解时,测试项目不会报错
4、@ConfigurationProperties 和 @Value 的各自使用场景:
如果只是在某个业务逻辑中需要获取配置文件中的某个属性值,就使用 @Value
如果专门使用javaBean和配置文件进行映射,就使用 @ConfigurationProperties