SpringBoot的yaml配置及应用
2021/11/6 23:40:01
本文主要是介绍SpringBoot的yaml配置及应用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
环境问题:
- SpringBoot单元测试Junit5与idea版本会有问题,导致无法单元测试!
解决方案:加pom.xml文件中的依赖。
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.5.2</version> </dependency>
- 为了使idea中不会对@ConfigurationProperties注解不报红,需要导入依赖!
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
3.JSR303数据校验需要导入的依赖!
<dependency><!--数据校验依赖,为了实现@Email注解--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
1.banner修改SpringBoot的启动图案
在resources目录下创建一个banner.txt文件
(¸¸.♥➷♥•*¨)¸.•´¸.•*¨) ¸.•*¨) (¸.•´(¸. ¸.•´¸.•*¨) ¸.♥➷•*¨) ─▀██▀─▄███▄─▀██─██▀██▀▀▀█─ ──██─███─███─██─██─██▄█──conquers ──██─▀██▄██▀─▀█▄█▀─██▀█──all ♥➷♥ ─▄██▄▄█▀▀▀─────▀──▄██▄▄▄█ ¸.•´¸.•*¨) ¸♥.•*¨) (¸.•´¸♥➷♥¸.•´♥¸.•´♥¸.•*¨)♥.•*¨)¸.•*♥¸
就可以修改SpringBoot启动时的图案显示
2.yaml(yml)文件
说明:语法要求严格!
- 空格不能省略
- 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
- 属性和值的大小写都是十分敏感的。
实例:
- 创建一个实体类
package com.chen.pojo; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; @Component/*相当于<Bean id="" ...> 类注入功能*/ @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; public Person() { } public Person(String name, Integer age, Boolean happy, Date birth, Map<String, Object> maps, List<Object> lists, Dog dog) { this.name = name; this.age = age; this.happy = happy; this.birth = birth; this.maps = maps; this.lists = lists; this.dog = dog; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", happy=" + happy + ", birth=" + birth + ", maps=" + maps + ", lists=" + lists + ", dog=" + dog + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Boolean getHappy() { return happy; } public void setHappy(Boolean happy) { this.happy = happy; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public Map<String, Object> getMaps() { return maps; } public void setMaps(Map<String, Object> maps) { this.maps = maps; } public List<Object> getLists() { return lists; } public void setLists(List<Object> lists) { this.lists = lists; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } }
- 在resources目录中创建一个application.yaml文件
person: name: cjs${random.uuid} age: ${random.int} happy: false birth: 2021/11/6 maps: {k1: v1,k2: v2} lists: -code -music -girl dog: name: ${person.name:chen}_cjs age: 5
- 在默认的test的类里自动装配实体类,并测试结果
package com.chen; import com.chen.pojo.Dog; import com.chen.pojo.Person; import com.chen.pojo.TestUser; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class Springboot02ConfigApplicationTests { @Autowired/*Spring自动装配对象*/ private Person person; @Test void contextLoads() { System.out.println(person); } }
可以发现,在yml文件的数据可以赋值到对象对应的属性中。
@ConfigurationProperties(prefix = "person")这个注解是绑定类与yml的
prefix的值要对应实例化的参数名!
yaml与properties配置文件的区别:
- @ConfigurationProperties只需要写一次即可,@Value则需要每个字段都添加。
- 松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的,后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下
- JSR303数据校验,这个就是我们可以在字段是增加一层过滤器验证,可以保证数据的合法性。
- 复杂类型封装,yml中可以封装对象,使用value就不支持。
结论,配置yml和配置properties都可以获取到值,强烈推荐 yml;
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!
3. JSR303的数据校验
创建一个实体类:
package com.chen.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.*; import java.util.Date; @Data @NoArgsConstructor @AllArgsConstructor @Component @Validated/*一定要开这个注解,才能进行JSR303的数据校验*/ @ConfigurationProperties(prefix = "user") public class TestUser { @NotNull(message = "名字不能为空") private String username; @Max(value = 120,message = "你的岁数真大啊") private int age; @Email(message = "邮箱格式错误") private String email; @Past(message = "生日输入有误") private Date birth; }
创建对应的yml文件:
user: username: cjs age: 100 email: 1983691635@qq.com birth: 2000/12/25
测试类:
package com.chen; import com.chen.pojo.Dog; import com.chen.pojo.Person; import com.chen.pojo.TestUser; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class Springboot02ConfigApplicationTests { @Autowired/*Spring自动装配对象*/ private TestUser user; @Test void contextLoads() { System.out.println(user); } }
可以看到,利用JSR303的数据校验来对实体类中的数据进行多种的检验。
注意:一定要在实体类上加上@Validated注解,才能开启数据校验。
4.多环境切换
profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境。
创建yaml文件:
server: port: 8082 #选择要激活那个环境块 spring: profiles: active: dev --- server: port: 8083 spring: profiles: dev --- server: port: 8084 spring: profiles: test ---
运行SpringBoot主程序,发现端口号改变了。
结论,可以通过修改active中的值,来修改SpringBoot的端口号,
同理,在开发中我们可以利用这种方式来修改程序环境!
5.配置文件加载位置
优先级1:项目路径下的config文件夹配置文件
优先级2:项目路径下配置文件
优先级3:资源路径下的config文件夹配置文件
优先级4:资源路径下配置文件
这篇关于SpringBoot的yaml配置及应用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略