博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot 中 yml 配置注入:原理解释
阅读量:3967 次
发布时间:2019-05-24

本文共 4103 字,大约阅读时间需要 13 分钟。

1、springboot的配置文件

Springboot有一个全局的配置文件,配置文件的名是固定的。

application.properties : key=value

appication.yml: key: 空格 value

配置文件的作用:修改SpringBoor自动配置的默认值。底层探究—>

1.1 yml概述

YAML (YAML Ain't a Markup Language)YAML不是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等-------------------------------约定-----------------------------------------k: v 表示键值对关系,冒号后面必须有一个空格使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的大小写敏感缩进时不允许使用Tab键,只允许使用空格。松散表示,java中对于驼峰命名法,可用原名或使用-代替驼峰,如java中的lastName属性,在yml中使用lastName或 last-name都可正确映射。-----------------------------------键值关系-----------------------------------(以java语言为例,其它语言类似)对于键与值主要是看能否表示以下内容。普通的值(数字、字符串、布尔)、日期、对象、数组、集合等。

比较传统的xml和yml

8080
server: port: 8080

2、注入配置文件

2.1 yaml 注入配置文件

2.1.1 原始的注入值

​ 1、编写一个pojo包下的实体类(简单的)

@Componentpublic class Student {
@Value("Ryan") private String name; private String email; private String sex; private Integer age; .....}

​ 2、原始通过 @Value 注解给bean注入属性值

@SpringBootTestclass SpringBootymlApplicationTests {
@Autowired private Student student; @Test void contextLoads() {
System.out.println(student); }}

​ 3、测试一下

在这里插入图片描述

2.1.2 使用yaml的方式注入

​ 1、在springboot项目中resources 目录下新建一个文件application.yml

person:  name: lxx  age: 3  happy: false  birth: 2021/01/01  maps: {
k1: v1,k2: v2} lists: - code - girl - music student: name: JJ

​ 2、编写一个pojo包下的实体类(复杂的)

@Component //注册bean到容器中@ConfigurationProperties(prefix = "person")public class Person {
private String name; private Integer age; private Boolean happy; private Date birth; private Map
maps; private List
lists; private Student student;}

​ 3、原始通过 @Value 注解给bean注入属性值

@ConfigurationProperties(prefix = "person")  导入一下依赖坐标
org.springframework.boot
spring-boot-configuration-processor
true

4、测试一下

@SpringBootTestclass SpringBootymlApplicationTests {
@Autowired private Person person; @Test void contextLoads() {
System.out.println(person); }}

在这里插入图片描述

解释@ConfigurationProperties:

/*	@ConfigurationProperties 的作用:       (1)将配置文件配置的每一个属性值,映射到这个组件中。       (2)告诉springboot将本列多有的属性和配置文件中相关的配置进行绑定       (3)参数 prefix=“XXX” ;和配置文件中XXX下面的属性一一对应       */

IDEA 提示,springboot配置注解处理器没有找到,导入一个依赖;

org.springframework.boot
spring-boot-configuration-processor
true

在这里插入图片描述

2.1.3 加载指定的配置文件

@PropertySource: 加载指定的配置文件@ConfigurationProperties: 默认从全局文件中获取值

测试:

​ 1、在resources目录下新建一个person.properties文件

​ 2、指定代码中加载person.properties文件

name=Austin

​ 3、输出测试:

使用properties配置文件在写中文的时候,会出现中文乱码l

在idea中settings–>FileEncodings 中配置

在这里插入图片描述

2.2 比较 @ConfigurationProperties 和 @Value的总结

在这里插入图片描述

配置yml和配置properties都可以获取到值 , 强烈推荐 yml;如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!

2.2.1 松散语法

什么是松散的语法?

在这里插入图片描述

​ 1、创建一个实体类

​ 2、配置yml文件

​ 3、测试一下

可以自行测试

2.2.2 JsR303数据校验

如何使用?

Springboot 中可以使用@Validated来校验数据,如果数据异常则会抛出以上,方便异常的统一处理

案例:email 格式:

作用: 使用数据校验,可以确保数据的正确性

@NotNull(message="名字不能为空")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,只对字符串,且会去掉前后空格.@NotEmpty   检查约束元素是否为NULL或者是EMPTY.    Booelan检查@AssertTrue     验证 Boolean 对象是否为 true  @AssertFalse    验证 Boolean 对象是否为 false      长度检查@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  @Length(min=, max=) string is between min and max included.日期检查@Past       验证 Date 和 Calendar 对象是否在当前时间之前  @Future     验证 Date 和 Calendar 对象是否在当前时间之后  @Pattern    验证 String 对象是否符合正则表达式的规则

3、多环境切换

3.1不同环境的配置

profile是Spring对不同环境提供不同的配置功能的支持,可以通过激活不同的环境版本,实现快速切环境。

#启动springBoot,配置环境,使用  debug: true 来查看spring:  profiles:    active:
例如:application-test.yml: 代表测试环境的配置application-dev.yml:  代表开发环境配置默认是主配置文件:application.yml

3.2配置文件加载的位置

优先级高到底:

项目路径下的config文件夹配置文件-->项目路径下配置文件--->资源路径下的config文件夹配置文件--->资源路径下配置文件

指定位置加载配置文件:

通过spring.config.location来改变默认的配置文件位置

转载地址:http://zbcki.baihongyu.com/

你可能感兴趣的文章
Linux环境进程间通信(二): 信号…
查看>>
Linux环境进程间通信(二): 信号…
查看>>
wait和waitpid函数
查看>>
wait和waitpid函数
查看>>
fcntl 函数
查看>>
fcntl 函数
查看>>
Linux 系统内核的调试
查看>>
Linux 系统内核的调试
查看>>
Linux设备驱动调试技术 1
查看>>
Linux设备驱动调试技术 1
查看>>
Linux设备驱动调试技术 2
查看>>
Linux设备驱动调试技术 2
查看>>
Linux设备驱动调试技术 3
查看>>
Linux设备驱动调试技术 3
查看>>
java 访问 usb (一)
查看>>
java 访问 usb (一)
查看>>
linux-2.6.14下USB驱动移植心得
查看>>
linux-2.6.14下USB驱动移植心得
查看>>
[S3C6410]USB-HOST驱动完成
查看>>
[S3C6410]USB-HOST驱动完成
查看>>