Spring Boot 配置文件解析
一、前言
SpringBoot 使用一个全局的配置文件,配置文件名固定的;
·application.properties
·application.yml
配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
YAML(YAML Ain't Markup Language)
YAML A Markup Language:是一个标记语言
YAML isn't Markup Language:不是一个标记语言;
标记语言:
以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以数据为中心,比json、xml等更适合做配置文件;
二、YAML语法
2.1基本语法
k:(空格)v: 表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一层级的
属性和值也是大小写敏感
2.2 值的写法
字面量: 普通的值(数字,字符串,布尔)
k: v: 字面直接来写
字符串默认不用加上单引号或者双引号
"":双引号,会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi": 输出; zhangsan 换行 lisi
'':单引号;不会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name:' zhangsan \n lisi': 输出; zhangsan \n lisi
2.3 对象、数组、Map(属性和值)(键值对)
在下一行来写对象的属性和值的关系;注意缩进
对象:(还是k: v的方式)
行内写法 (注意空格)
数组:
Map :
三、配置文件值注入
3.1 使用@ConfigurationProperties将值注入到属性中
application.yml配置文件的内容:
server:port: 8082Person:last_name: "xiaobai \n xxx"age: 21birth: 2025/09/22boss: falsemaps: {k1: shuai,k2: ku}lists:-lisi-zhaoliudog: {name: Snax,age: 12}
javaBean:
我们可以导入配置文件处理器,以后编写配置就有提示了
<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId><optional>true</optional>
</dependency>
我们编写一个测试类,
@Autowiredprivate Person person;@Testpublic void TestPerson(){System.out.println(person);}
发现yml里面配置的内容给到了Person类的属性了
3.2 @Value获取值和@ConfigurationProperties获取值比较
3.2.1松散绑定:
通过@ConfigurationProperties方法注入值
Person类里的LastName属性 和yml文件中的名字不一样,照样能够注入成功
但是@Value注解必须要精准匹配yml里的键值,才能注入值
3.2.2 SpEL表达式
@Value支持计算表达式
但是@ConfigurationProperties不支持
3.2.3 数据校验
我们可以新加一个email属性,并对email属性进行依次数据校验
给email 赋值
分别用这两种注入方式查看结果:
@ConfigurationProperties报错了,说明支持数据校验
@Value 直接打印了结果,说明它根本没有数据校验这回事
3.2.4 复杂类型封装
复杂类型指的是 Map、对象等类型
我们是直接在yml文件里赋值的,@Vaue无法干这件事
3.2.3 @PropertySource @ImportResource @Bean
@PropertySource: 加载指定的配置文件
person.properties文件中的内容:
person.lastName=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15
运行一下:
说明person.properties文件里的相应值注入了Person里的属性中
@ImportResource
导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
在主程序中引入注解,使Bean.xml生效
配置一下Bean.xml吧
我们引入了alibaba中的Druid连接池
此时我们去测试类里测试,连接池是否引入成功?
发现引入成功
还有一种方法,我们在Spring框架中想引入一个配置文件是这样引入的
@org.junit.Testpublic void test() {ApplicationContext context = new AnnotationConfigApplicationContext(UserProxy.class);UserService userService = (UserService) context.getBean("userserviceimpl");userService.save();}
在这里我们用同样的思路验证是否引入了druid连接池
验证:
引入成功!
ok,今天小编就分享到这里,希望对你的学习有所帮助哦