yaml配置⽂件与注⼊
⼀、yaml语法学习
1. 配置⽂件
SpringBoot使⽤⼀个全局的配置⽂件,配置⽂件名称是固定的
application.properties
语法结构:key=value
语法结构:key:空格 value
配置⽂件的作⽤:修改SpringBoot⾃动配置的默认值,因为SpringBoot在底层已经⾃动配置好了。如我们可以在配置⽂件中修改Tomcat 默认启动的端⼝号
server.port=8081
2. 什么是yaml
YAML是 "YAML Ain't a Markup Language" (YAML不是⼀种标记语⾔)的递归缩写。在开发的这种语⾔时,YAML 的意思其实是:"Yet Another Markup Language"(仍是⼀种标记语⾔)
这种语⾔以数据作为中⼼,⽽不是以标记语⾔为重点!
以前的配置⽂件⼤多数都是使⽤xml来配置。⽐如⼀个简单的端⼝配置,我们来对⽐下yaml和xml
传统xml配置
<server>
<port>8081<port>
</server>
yaml配置
server:
prot: 8080
3. yaml语法
说明:语法要求严格
1、空格不能省略
2、以缩进来控制层级关系,只要是左边对齐的⼀列数据都是同⼀层级
3、属性和值的⼤⼩写敏感
配置普通数据
字⾯量:如普通的值 [ 数字,布尔值,字符串 ]
字⾯量直接写在后⾯就可以,字符串默认不⽤加上双引号或者单引号
语法: key: value
k: v
注意:
value之前有⼀个空格
“ ” 双引号不会转义字符串⾥⾯的特殊字符,特殊字符能表达本⾝想表⽰的意思
⽐如:name: "Hello \n Springboot"输出:Hello 换⾏ Springboot
'' 单引号会转义特殊字符,特殊字符最终会变成和普通字符⼀样输出
⽐如:name: ‘Hello \n Springboot’输出:Hello \n Springboot
配置对象、Map(键值对)数据
#对象、Map格式
key:
key1: value1
key2: value2
#⾏内写法
key: {key1: value1,key2: value2}
⽰例代码:
person:
name: java
age: 18
#或者
person: {name: haohao,age: 31}
配置数组(List、Set)数据
⽤-值表⽰数组中的⼀个元素,注意value与数据之间的- 之间存在⼀个空格#语法:
key:
- value1
- value2
#⾏内写法
key: [value1,value2]
⼆、注⼊配置⽂件
yaml⽂件强⼤的地⽅在于可以给实体类直接注⼊匹配值
1. yaml注⼊配置⽂件
①在springboot项⽬中的resources⽬录下新建⼀个⽂件 l
②编写⼀个实体类 Dog
package com.kuang.springboot.pojo;
@Component  //注册bean到容器中
public class Dog {
private String name;
private Integer age;
//有参⽆参构造、get、set⽅法、toString()⽅法
}
懒人图库js代码③试着⽤@Value给bean注⼊属性值
@Component //注册bean
public class Dog {
@Value("旺财")
private String name;
@Value("1")
private Integer age;
}
④在SpringBoot的测试类下注⼊并输出
@SpringBootTest
class DemoApplicationTests {
@Autowired //将狗狗⾃动注⼊进来
Dog dog;
@Test
public void contextLoads() {
System.out.println(dog); //打印看下狗狗对象
}
}
结果成功输出,@Value注⼊成功
Dog{name='旺财', age=1}
⑤再编写⼀个复杂点的实体类
@Component //注册bean到容器中
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;
/
/有参⽆参构造、get、set⽅法、toString()⽅法
}
⑥使⽤yaml配置的⽅式进⾏注⼊
写的时候注意区别和优势,⾸先编写⼀个yaml配置
person:
name: qinjiang
age: 3
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
-
code
- girl
- music
dog:
name: 旺财
age: 1
⑦把对象的所有值都写好后,注⼊到类中
/*
@ConfigurationProperties作⽤:
将配置⽂件中配置的每⼀个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置⽂件中相关的配置进⾏绑定
参数 prefix = “person” : 将配置⽂件中的person下⾯的所有属性⼀⼀对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
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;
}
⑧ IDEA 提⽰,springboot配置注解处理器没有到
Not Found
The requested URL /spring-boot/docs/2.3.3.RELEASE/reference/html/configuration-metadata.html was not found on this server.查看⽂档(在⽹址中更改版本获得,如回到2.1.9),到⼀个依赖
<!-- 导⼊配置⽂件处理器,配置⽂件进⾏绑定就会有提⽰,需要重启 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
⑨确认以上配置都完成后,去测试类中测试
@SpringBootTest
class DemoApplicationTests {
@Autowired
Person person; //将person⾃动注⼊进来
@Test
public void contextLoads() {
System.out.println(person); //打印person信息
}
}
结果:所有值全部注⼊成功
2. 加载指定配置⽂件
@PropertySource :加载指定的配置⽂件;
@configurationProperties:默认从全局配置⽂件中获取值
1. 在resources⽬录下新建⼀个person.properties⽂件
name=hello
2. 在代码中指定加载person.properties⽂件
@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {
@Value("${name}")
private String name;
.
.....
}
3. 再次输出测试,指定配置⽂件绑定成功
配置⽂件占位符
配置⽂件还可以编写占位符⽣成随机数
person:
name: qinjiang${random.uuid} # 随机uuid
age: ${random.int}  # 随机int
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: ${person.hello:other}_旺财
age: 1
回顾properties配置
上⾯采⽤的yaml⽅法都是最简单的⽅式,也是开发中最常⽤的、pringboot所推荐的
接下来看看其他的实现⽅式,原理都是相同的,写还是那样写
配置⽂件除了yml还有之前常⽤的properties
【注意】properties配置⽂件在写中⽂的时候会有乱码,需要去IDEA中设置编码格式为UTF-8:settings-->FileEncodings 中配置测试步骤
1. 新建⼀个实体类User
@Component //注册bean
public class User {
private String name;
private int age;
private String sex;
}
2. 编辑配置⽂件 user.properties
user1.name=Hello
properties是什么文件user1.age=18
数据库和数据库系统的区别
user1.sex=男
3. 在User类上使⽤@Value来进⾏注⼊
@Component //注册bean
@PropertySource(value = "classpath:user.properties")
public class User {
//直接使⽤@value
@Value("${user.name}") //从配置⽂件中取值
private String name;
@Value("#{9*2}")  // #{SPEL} Spring表达式
private int age;
@Value("男")  // 字⾯量
private String sex;
}
4. Springboot测试
SpringBootTestppt模板免费下载网站讲课
class DemoApplicationTests {
@Autowired
User user;
@Test
public void contextLoads() {
System.out.println(user);
}
}
结果正常输出
对⽐⼩结
@Value使⽤起来并不友好!我们需要为每个属性单独注解赋值⽐较⿇烦
cmd有哪些有趣的命令
1. @ConfigurationProperties只需要写⼀次即可, @Value则需要每个字段都添加
2. 松散绑定:这个什么意思呢? ⽐如yml中写的last-name,这个和lastName是⼀样的, -后⾯跟着的字母默认是⼤写的。这就是松散绑定
3. JSR303数据校验,可以在字段是增加⼀层过滤器验证,保证数据的合法性
4. 复杂类型封装,yml中可以封装对象,使⽤value就不⽀持
结论:
1. 配置yml和配置properties都可以获取到值,强烈推荐 yml;
2. 如果在某个业务中,只需要获取配置⽂件中的某个值,可以使⽤⼀下 @value;
3. 如果专门编写了⼀个JavaBean来和配置⽂件进⾏⼀⼀映射,就直接使⽤@configurationProperties
JSR303数据校验
Springboot中可以⽤@validated来校验数据,如果数据异常则会统⼀抛出异常,⽅便异常中⼼统⼀处理。这⾥来写个注解让name只能⽀持Email格式
@Component //注册bean
@ConfigurationProperties(prefix = "person")
@Validated //数据校验
public class Person {
@Email(message="邮箱格式错误") //name必须是邮箱格式
private String name;
}
运⾏结果:default message [不是⼀个合法的电⼦邮件地址]
使⽤数据校验,可以保证数据的正确性;下⾯列出⼀些常见的使⽤
@NotNull(message="名字不能为空")
java贪吃蛇代码详解private String userName;
@Max(value=120,message="年龄最⼤不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, ⽆法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否⼤于0,只对字符串,且会去掉前后空

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。