SpringBoot学习(三)YAML语法、JSR303校验、多环境开发切换
文章目录
- 一、YAML语法
- 1、YAML解释
- 2、YAML基础语法
- 3、使用YAML注入配置文件
- 4、使用指定的`properties`配置文件加载属性
- 二、JSR303检验
- 三、多环境开发
一、YAML语法
1、YAML解释
百度百科:
YAML是一个可读性高,用来表达数据序列化的格式。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
开发的这种语言时,YAML 的意思是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
2、YAML基础语法
- 传统的xml配置
server.port=8511
- yaml配置
server:port: 8512
yaml语法规范:
- 空格不能省略
- 层级关系通过缩进来控制,比如上面的server.port,server下的一个缩进就代表port是server的一个属性。
3、使用YAML注入配置文件
- 新建实体类
Person
和Dog
,使用lombok
lombok依赖:
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>
实体类:Person
package com.zyh.pojo;import lombok.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@Component //把类注册到容器中
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Setter
public class Person {private String name;private int age;}
Dog
package com.zyh.pojo;import lombok.*;
import org.springframework.stereotype.Component;import java.util.Date;
import java.util.List;
import java.util.Map;@Component
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Dog {private String name;private int age;private boolean security;private Date birthday;private Map<String,Object> maps;private List lists;private Person host;
}
- 编写一个
application.yaml
配置文件来给对象注入属性值
dog:name: 旺财age: 3#boolean值security: true#Datebirthday: 2017/9/9#Mapmaps: {k1: v1,k2: v2}#Listlists:- run- jump- sing#自定义对象 host:name: zyhage: 20
- 我们在yaml中写好值后,在实体类使用
@ConfigurationProperties(prefix = "dog")
中导入值。
@ConfigurationProperties(prefix = "dog")
的作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
package com.zyh.pojo;import lombok.*;
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
@ConfigurationProperties(prefix = "dog")
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Dog {private String name;private int age;private boolean security;private Date birthday;private Map<String, Object> maps;private List lists;private Person host;
}
- 添加spring-boot注解处理器的依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>
- 在SpringBoot测试类中测试:
package com.zyh;import com.zyh.pojo.Dog;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class Springboot02YamlApplicationTests {//注入对象@Autowiredprivate Dog dog;@Testvoid contextLoads() {System.out.println(dog);}
}
执行结果:
4、使用指定的properties
配置文件加载属性
- 新建一个
properties
文件
name=zhaoyuhang
age=23
- 在实体类中导入属性值
package com.zyh.pojo;import lombok.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@Component //把类注册到容器中
@PropertySource(value = "classpath:zhaoyuhang.properties")//导入配置文件
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Setter
public class Person {//使用@Value读取配置文件中的属性值@Value("${name}")private String name;@Value("${age}")private int age;}
- 测试:
package com.zyh;import com.zyh.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class Springboot02YamlApplicationTests {@Autowiredprivate Person person;@Testvoid contextLoads() {System.out.println(person);}
}
执行结果:
@ConfigurationpPropertie和@Value对比
@ConfigurationpPropertie | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 只能注入单个属性 |
El表达式 | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
二、JSR303检验
JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 。
@Validated //使用JSR303校验@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 对象是否符合正则表达式的规则
测试:实体类中添加JSR303校验
package com.zyh.pojo;import lombok.*;
import org.hibernate.validator.constraints.Length;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;@Component //把类注册到容器中
@ConfigurationProperties(prefix = "person")
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Setter
//JSR303校验
@Validated
public class Person {//使用@Value读取配置文件中的属性值@Size(min = 6,max = 15)@NotNullprivate String name;private int age;}
测试类测试:
package com.zyh;import com.zyh.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class Springboot02YamlApplicationTests {@Autowiredprivate Person person;@Testvoid contextLoads() {System.out.println(person);}
}
执行结果:运行报错
三、多环境开发
我们在创建一个SpringBoot项目的时候,默认的配置文件是properties
格式的,但在SpringBoot中我们一般都使用yaml配置。
我们在编写配置文件的时候,文件名可以是
application.properties或application.yaml
但是我们可以在编写一些测试和开发的环境
例如:
application-dev.properties
application-test.properties
这就是使用properties
配置文件的弊端,必须手动编写多个配置文件来配置多环境开发,但如果使用yaml
配置,就无须在编写那么多的配置文件,只需要在主配置文件中使用三个中划线分开即可。
server:port: 8081
spring:profiles:active: dev # 切换环境
---
server:port: 8082
spring:profiles: test #配置环境的名字
---
server:port: 8083
spring:profiles: dev
开启服务:运行端口为选择的dev环境端口。
SpringBoot学习(三)YAML语法、JSR303校验、多环境开发切换相关推荐
- python学习三-基础语法
python学习三-基础语法(2019-12-24日晚) 1.源码文件 Python源码文件名通常采用小写的方式,常见的扩展名有: py:基本的源码扩展名. pyw:是另一种源码扩展名,跟py唯一的区 ...
- SpringBoot学习三:常用注解(配置相关)
SpringBoot常用注解(配置相关) 1.yml语法 ★注意空格 yml中的写法 properties中的写法 2.@Value获取值和@ConfigurationProperties获取值比较 ...
- SpringBoot中的yaml语法及静态资源访问问题
配置文件-yaml 在spring Boot开发中推荐使用yaml来作为配置文件. 基本语法: key: value:kv之间有空格 大小写敏感 使用缩进表示层级关系 缩进不允许使用tab,只允许空格 ...
- Spring Boot 框架学习笔记(二)(配置文件与数据注入 yaml基本语法 JSR303数据验证 多环境切换 )
Spring Boot 框架学习笔记(二) 六.appliaction.properties配置与数据注入 6.1 `@Value`注解 测试注入数据 读取输入流 6.2 读取配置文件数据注入 单文件 ...
- SpringBoot给属性赋值的几种方式以及JSR303校验
一.@ConfigurationProperties的作用: 将配置文件中配置的每一个属性的值映射到这个组件中; 告诉SpringBoot将本来中的所有属性和配置文件中的相关配置进行绑定; 参数 pr ...
- springboot概述、自动转配原理、yaml语法、多环境配置及文件位置
SpringBoot-1 概述 什么是Spring Spring是一个开源框架,2003年兴起的一个轻量级的Java开发框架,作者:RodJohnson. Spring是为下解决企业级应用开发的复杂性 ...
- SpringBoot yaml语法详解
SpringBoot yaml语法详解 1.yaml基本语法 2.yaml给属性赋值 3.JSR303校验 4.SpringBoot的多环境配置 1.yaml基本语法 通常情况下,Spring Boo ...
- SpringBoot之yaml语法、配置文件、多环境切换
SpringBoot Banner生成网站:https://www.bootschool.net/ascii 在SpringBoot项目的resource目录下,新建一个banner.txt文件,将自 ...
- jar包等概念的理解、yaml语法学习和多环境切换
一.学习内容 jar包等概念的理解 yaml语法学习 多环境切换 1.jar包等概念的理解 这部分的学习内容是关于一些名词的解释,这些名词是我在看课过程中,听到或看到却又未曾了解的.因为不理解这些名词 ...
- Springboot之YAML语法
概述 YAML是 JSON 的超集,因此,它是用于指定分层配置数据的便捷格式.只要 class 路径上有SnakeYAML library,SpringApplication class 就会自动支持 ...
最新文章
- Vue.js slots: 为什么你需要它们?
- Python加密—AES加密(2)
- 学了网络安全以后能做哪些岗位呢?来来来,带你们了解
- git 项目常用命令
- matlab数值过小为0,MATLAB数值计算——0
- html + css实现油画商场页面
- SiteMesh学习入门
- 前华为、魅族CMO加盟小米,雷军这样评价
- [递推][jzyzojP1252]:递推专练4
- birt插件 web_birt 集成到现有的web应用中
- python电脑版-mPython
- C#调用API函数EnumWindows枚举窗口的方法
- 加密软件漏洞评测系统_惠州上线软件产品登记测试企业
- Windows 7 一年试用批处理
- python_迭代器、生成器
- 黑客帝国屏幕保护源码
- 智能车竞赛技术报告 | 智能车视觉 - 西北工业大学 - 赤霄2021
- 微信公众号h5开发流程
- 实验三 基于A*算法的迷宫游戏
- 【NGUI】Unity实现英雄联盟选择皮肤效果