文章目录

  • 一、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语法规范:

  1. 空格不能省略
  2. 层级关系通过缩进来控制,比如上面的server.port,server下的一个缩进就代表port是server的一个属性。

3、使用YAML注入配置文件

  1. 新建实体类 PersonDog,使用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;
}
  1. 编写一个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
  1. 我们在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;
}
  1. 添加spring-boot注解处理器的依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>
  1. 在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配置文件加载属性

  1. 新建一个properties文件
name=zhaoyuhang
age=23
  1. 在实体类中导入属性值
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;}
  1. 测试:
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校验、多环境开发切换相关推荐

  1. python学习三-基础语法

    python学习三-基础语法(2019-12-24日晚) 1.源码文件 Python源码文件名通常采用小写的方式,常见的扩展名有: py:基本的源码扩展名. pyw:是另一种源码扩展名,跟py唯一的区 ...

  2. SpringBoot学习三:常用注解(配置相关)

    SpringBoot常用注解(配置相关) 1.yml语法 ★注意空格 yml中的写法 properties中的写法 2.@Value获取值和@ConfigurationProperties获取值比较 ...

  3. SpringBoot中的yaml语法及静态资源访问问题

    配置文件-yaml 在spring Boot开发中推荐使用yaml来作为配置文件. 基本语法: key: value:kv之间有空格 大小写敏感 使用缩进表示层级关系 缩进不允许使用tab,只允许空格 ...

  4. Spring Boot 框架学习笔记(二)(配置文件与数据注入 yaml基本语法 JSR303数据验证 多环境切换 )

    Spring Boot 框架学习笔记(二) 六.appliaction.properties配置与数据注入 6.1 `@Value`注解 测试注入数据 读取输入流 6.2 读取配置文件数据注入 单文件 ...

  5. SpringBoot给属性赋值的几种方式以及JSR303校验

    一.@ConfigurationProperties的作用: 将配置文件中配置的每一个属性的值映射到这个组件中; 告诉SpringBoot将本来中的所有属性和配置文件中的相关配置进行绑定; 参数 pr ...

  6. springboot概述、自动转配原理、yaml语法、多环境配置及文件位置

    SpringBoot-1 概述 什么是Spring Spring是一个开源框架,2003年兴起的一个轻量级的Java开发框架,作者:RodJohnson. Spring是为下解决企业级应用开发的复杂性 ...

  7. SpringBoot yaml语法详解

    SpringBoot yaml语法详解 1.yaml基本语法 2.yaml给属性赋值 3.JSR303校验 4.SpringBoot的多环境配置 1.yaml基本语法 通常情况下,Spring Boo ...

  8. SpringBoot之yaml语法、配置文件、多环境切换

    SpringBoot Banner生成网站:https://www.bootschool.net/ascii 在SpringBoot项目的resource目录下,新建一个banner.txt文件,将自 ...

  9. jar包等概念的理解、yaml语法学习和多环境切换

    一.学习内容 jar包等概念的理解 yaml语法学习 多环境切换 1.jar包等概念的理解 这部分的学习内容是关于一些名词的解释,这些名词是我在看课过程中,听到或看到却又未曾了解的.因为不理解这些名词 ...

  10. Springboot之YAML语法

    概述 YAML是 JSON 的超集,因此,它是用于指定分层配置数据的便捷格式.只要 class 路径上有SnakeYAML library,SpringApplication class 就会自动支持 ...

最新文章

  1. Vue.js slots: 为什么你需要它们?
  2. Python加密—AES加密(2)
  3. 学了网络安全以后能做哪些岗位呢?来来来,带你们了解
  4. git 项目常用命令
  5. matlab数值过小为0,MATLAB数值计算——0
  6. html + css实现油画商场页面
  7. SiteMesh学习入门
  8. 前华为、魅族CMO加盟小米,雷军这样评价
  9. [递推][jzyzojP1252]:递推专练4
  10. birt插件 web_birt 集成到现有的web应用中
  11. python电脑版-mPython
  12. C#调用API函数EnumWindows枚举窗口的方法
  13. 加密软件漏洞评测系统_惠州上线软件产品登记测试企业
  14. Windows 7 一年试用批处理
  15. python_迭代器、生成器
  16. 黑客帝国屏幕保护源码
  17. 智能车竞赛技术报告 | 智能车视觉 - 西北工业大学 - 赤霄2021
  18. 微信公众号h5开发流程
  19. 实验三 基于A*算法的迷宫游戏
  20. 【NGUI】Unity实现英雄联盟选择皮肤效果

热门文章

  1. rabbitmq 发送的用户名是什么
  2. day21-2 类的派生
  3. Linux学习——操作文件与目录
  4. Facebook团队关于网页缓存的再实践
  5. FreeMarker字符串操作
  6. 穷究链表(四)--链表实现前的思考
  7. 计算机网络复习-运输层
  8. 【论文翻译】CenterNet: Objects as Points
  9. 雷达的工作原理示意图_平板吊袋离心机工作原理及结构示意图
  10. 【Caffe代码分析】DataLayer