本文主要介绍,SpringBoot+yaml和SpringBoot+JSR303
一、SpringBoot+yaml
1.SpringBoot配置文件
SpringBoot使用的是一个全局的配置文件,且配置文件是固定的
- application.properties
- application.yaml或者application.yml
2.什么是yam
"YAML Ain't a Markup Language","Yet Another Markup Language"
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
3.yaml基本语法
- 大小写敏感
- 空格敏感
- 使用缩进表示层级关系
- 缩进不允许使用Tab,只允许使用空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
#
表示注释
4.yaml数据类型
YAML 支持以下几种数据类型:(这部分的内容来自:菜鸟教程)
1.对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
key:空格value
2.数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
a.以 - 开头的行表示构成一个数组:
-A -B -C
b.支持多维数组,可以使用行内表示:
key: [value1, value2, ...]
c.数据结构的子成员是一个数组,则可以在该项下面缩进一个空格。
- - A - B - C
一个相对复杂的例子:
companies: - id: 1 name: company1 price: 200W - id: 2 name: company2 price: 500W
意思是 companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成。
d.数组也可以使用流式(flow)的方式表示:
companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]
3.纯量(scalars):单个的、不可再分的值,包括
字符串布尔值整数浮点数Null时间日期
使用一个例子来快速了解纯量的基本使用:
boolean: - TRUE #true,True都可以 - FALSE #false,False都可以float: - 3.14 - 6.8523015e+5 #可以使用科学计数法int: - 123 - 0b1010_0111_0100_1010_1110 #二进制表示null: nodeName: 'node' parent: ~ #使用~表示nullstring: - 哈哈 - 'Hello world' #可以使用双引号或者单引号包裹特殊字符 - newline newline2 #字符串可以拆成多行,每一行会被转化成一个空格date: - 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dddatetime: - 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
4.引用
& 锚点和 * 别名,可以用来引用:
& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。
defaults: &defaults adapter: postgres host: localhostdevelopment: database: myapp_development <<: *defaultstest: database: myapp_test <<: *defaults
相当于:
defaults: adapter: postgres host: localhostdevelopment: database: myapp_development adapter: postgres host: localhosttest: database: myapp_test adapter: postgres host: localhost
5.yaml中单引号与双引号
- 单引号('')
yaml中,单引号会转义特殊字符,特殊字符最终会以普通字符串形式输出
比如:
name: 'zhouzhou \n hahah'
输出:zhouzhou \n hahah
- 双引号("")
yaml中,双引号不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思
name: "zhouzhou \n hahah"
输出:zhouzhou 换行 hahah
6.yaml注入配置文件
yaml文件更强大的地方在于,它可以给我们的实体类直接注入匹配值!
a、在springboot项目中的resources目录下新建一个文件 application.yml
b、编写一个实体类 Person
import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.util.Date;import java.util.List;import java.util.Map;@Data@AllArgsConstructor@NoArgsConstructorpublic 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()方法,我这里用了lombok }
c.使用yaml配置的方式进行注入
server: port: 8081person: name: zhou age: 1 happy: true birth: 2020/05/17 maps: {k1: ddd,K2: xxx} lists: code music eat dog: name: 大黄 age: 3
d.将所有值都注入到我们的person类中:
import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;import java.util.Date;import java.util.List;import java.util.Map;@Data@AllArgsConstructor@NoArgsConstructor@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; //有参无参构造、get、set方法、toString()方法,我这里用了lombok}
e.IDEA 提示,springboot配置注解处理器没有找到。
我们可以查看文档,找到一个依赖!
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional></dependency>
f.测试:
import com.zhou.pojo.Person;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestclass MyspringbootApplicationTests { @Autowired //将person自动注入进来 Person person; @Test void contextLoads() { //之前一直打印不出来person信息,我下面这个输出竟然写的是System.out.println("person");好蠢的错误。 System.out.println(person); }}
结果:全部注入成功。
【注意】properties配置文件在写中文的时候,会有乱码 , 我们需要去IDEA中设置编码格式为UTF-8;
7.yaml支持松散绑定
比如,在yaml文件中用横杠-
连接两个单词last-name
形成的属性名称,与在类中用驼峰命名法形成的属性名称lastName
,可以被识别。
8.多环境切换(yaml来做吧)
1.以 profile 实现多环境切换:
profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境。
详细介绍可查看这篇博客:最详细的profile的使用
2.以 yaml 文件实现多环境切换:
主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本。
例如:
- application-test.properties 代表测试环境配置
- application-dev.properties 代表开发环境配置
但是Springboot并不会直接启动这些配置文件,它默认使用application.properties
主配置文件;
我们需要通过一个配置来选择需要激活的环境:
#比如在配置文件中指定使用dev环境,我们可以通过设置不同的端口号进行测试;#我们启动SpringBoot,就可以看到已经切换到dev下的配置了;spring.profiles.active=dev
yaml的多文档块
和properties配置文件中一样,但是使用yml去实现不需要创建多个配置文件,更加方便了 !
server: port: 8081#选择要激活那个环境块spring: profiles: active: prod ---server: port: 8083spring: profiles: dev #配置环境的名称 --- server: port: 8084spring: profiles: prod #配置环境的名称
【注意:】如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的。
外部加载配置文件的方式十分多,官方外部配置文件说明参考文档:
SpringBoot会从这四个位置全部加载主配置文件,高优先级的配置会覆盖低优先级的配置,并且互补配置;
- tip:项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;这种情况,一般是后期运维做的多,相同配置,外部指定的配置文件优先级最高
java -jar spring-boot-config.jar --spring.config.location=F:/application.properties
总结:
配置yml和配置properties都可以获取到值 , 强烈推荐 yml;
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
如果专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties。
二、SpringBoot+JSR303数据校验
后端校验技术:JSR303数据校验(目的:增加一层过滤器验证,可以保证数据的合法性)
1.JSR303基本校验规则:
空检查 @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=) Validates that the annotated string is between min and max included.日期检查 @Past 验证 Date 和 Calendar 对象是否在当前时间之前,验证成立的话被注释的元素一定是一个过去的日期 @Future 验证 Date 和 Calendar 对象是否在当前时间之后 ,验证成立的话被注释的元素一定是一个将来的日期 @Pattern 验证 String 对象是否符合正则表达式的规则,被注释的元素符合制定的正则表达式,regexp:正则表达式 flags: 指定 Pattern.Flag 的数组,表示正则表达式的相关选项。数值检查 建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为""时无法转换为int,但可以转换为Stirng为"",Integer为null @Min 验证 Number 和 String 对象是否大等于指定的值 @Max 验证 Number 和 String 对象是否小等于指定的值 @DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度 @DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度 @Digits 验证 Number 和 String 的构成是否合法 @Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。 @Range(min=, max=) 被指定的元素必须在合适的范围内 @Range(min=10000,max=50000,message="range.bean.wage") @Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证) @CreditCardNumber信用卡验证 @Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。 @ScriptAssert(lang= ,script=, alias=) @URL(protocol=,host=, port=,regexp=, flags=)
2.JSR303的使用
第一步:引入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
第二步:依照需求应用
可以上网搜索相关设置,也可以查看源码。
原文转载:http://www.shaoqun.com/a/642733.html
usps:https://www.ikjzd.com/w/513
萌店:https://www.ikjzd.com/w/1538
本文主要介绍,SpringBoot+yaml和SpringBoot+JSR303一、SpringBoot+yaml1.SpringBoot配置文件SpringBoot使用的是一个全局的配置文件,且配置文件是固定的application.propertiesapplication.yaml或者application.yml2.什么是yam"YAMLAin'taMarkupLangu
aca:https://www.ikjzd.com/w/1371
声网:https://www.ikjzd.com/w/2176
淘粉8:https://www.ikjzd.com/w/1725
如何使用KEEPA:https://www.ikjzd.com/tl/98506
亚马逊卖家优秀的分析工具Fetcher!:https://www.ikjzd.com/home/19178
不烧广告等死,烧广告穷死 | 旺季营销,6招教你省下广告费:https://www.ikjzd.com/home/132401
没有评论:
发表评论