YAML

YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写

# yaml配置
server:
prot:

YAML语法

# 基本语法(空格不能省略)
# 以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的
# 属性和值的大小写都是十分敏感的
k:(空格) v
# 例子
server:
  port: 8081
  path: /hello

字面量:普通的值  [ 数字,布尔值,字符串  ]

# 字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;
# “” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;比如 :name: "zhang \n san" ,输出 : zhang 换行 san
# '' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出 比如 : name: ‘zhang \n san’   输出 : zhang  \n   san
k: v

对象、Map(键值对)

k:
v1:
v2:
---
# 实例
student:
name: zhangsan
age:
# 行内写法
student: {name: zhangsan,age: }

数组( List、set )

k:
- v1
- v2
- v3
---
# 实例
pets:
- cat
- dog
- pig
# 行内写法
pets: [cat,dog,pig]

程序实现

导入配置文件处理器,配置文件进行绑定就会有提醒

<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

示例

# YAML配置
person:
name: 张三
age:
happy: true
birth: //
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: 温馨的小家
num: -------------------------------------------------- /*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应;
只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
*/
@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 Home home;
//get,set,toString省略
}

两种注入值方式对比@configurationProperties与@value

总结

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

YAML的多环境切换

yml实现不需要创建多个配置文件,一个配置文件用“---”分割即可,表示多个yml多文档块

# 示例
server:
port:
#选择要激活那个环境块
spring:
profiles:
active: prod ---
server:
port:
#配置环境的名称
spring:
profiles: dev --- server:
port:
#配置环境的名称
spring:
profiles: prod

注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的。

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

优先级由高到底,高优先级的配置会覆盖低优先级的配置

JSR303数据校验

spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。

// 示例
@Component //注册bean
@ConfigurationProperties(prefix = "person")
@Validated //数据校验
public class Person {
@Email //name必须是邮箱格式
private String email;
}

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

// @PropertySource注解加载person.properties配置文件,做关联
@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {
@Value("${name}")
private String name;
......
}

YAML语法使用,JSR303数据校验的更多相关文章

  1. springboot配置(yami配置文件,JSR303数据校验,多环境配置)

    yami配置文件 YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:&q ...

  2. [SpringBoot] - 配置文件的多种形式及JSR303数据校验

    Springboot配置文件: application.yml   application.properties(自带) yml的格式写起来稍微舒服一点 在application.properties ...

  3. Springboot:JSR303数据校验(五)

    @Validated //开启JSR303数据校验注解 校验规则如下: [一]空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @No ...

  4. SpringMVC框架07——服务器端JSR303数据校验

    1.数据校验概述 数据校验分为客户端校验和服务器端校验,客户端主要是通过过滤正常用户的误操作,是第一道防线,一般使用JavaScript代码实现.但是只有客户端校验是不够的,攻击者可以绕过客户端验证直 ...

  5. springMVC使用JSR303数据校验

    JSR303注解 hibernate validate是jsr 303的一个参考实现,除支持所有的标准校验注解外,他还支持扩展注解 spring4.0拥有自己独立的数据校验框架,同时支持jsr 303 ...

  6. JSR303数据校验

    Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理. 导入依赖: <dependency> <groupId>org ...

  7. SpringBoot 之 JSR303 数据校验

    使用示例: @Component @ConfigurationProperties(prefix = "person") @Validated //使用数据校验注解 public ...

  8. JSR-303 数据校验学习

    一.JSR-303简介JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator. 此实现与 Hibernate ...

  9. JAVAEE——SpringBoot配置篇:配置文件、YAML语法、文件值注入、加载位置与顺序、自动配置原理

    转载 https://www.cnblogs.com/xieyupeng/p/9664104.html @Value获取值和@ConfigurationProperties获取值比较   @Confi ...

随机推荐

  1. redis 的雪崩和穿透?

    https://blog.csdn.net/Aria_Miazzy/article/details/88066975

  2. day11-random模块-随机

    import random # 一.随机小数: print(random.random()) # 0.848972270116501结果是0-1之间的随机小数 print(random.uniform ...

  3. spring security在异步线程的处理

    https://spring.io/guides/topicals/spring-security-architecture 在异步线程中使用SecurityContextHolder , 需要将父线 ...

  4. Mate20 pro实现H265 (HEVC)实时硬件编码

    谁能告诉我手机上用H265实时编码有什么鸟用? 一.先看看手机支持哪些codec ALL_CODECS REGULAR_CODECS mine-type 选择mime-type为video/hevc, ...

  5. deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I

    这门课是讲一些分析机器学习问题的方法,如何更快速高效的优化机器学习系统,以及NG自己的工程经验和教训. 1. 正交化(Othogonalization) 设计机器学习系统时需要面对一个问题是:可以尝试 ...

  6. generate的使用verilog

    根据项目设计的需要,要实例化多个类似的模块,这些类似的模块包括方波波形发生器,这几个模块基本相同,除了参数传递值不同,其他他部分都是相同的 具体实现代码如下: 此外有计数模块的例化,这个模块例化多个的 ...

  7. [LC] 226. Invert Binary Tree

    Invert a binary tree. Example: Input: 4 / \ 2 7 / \ / \ 1 3 6 9 Output: 4 / \ 7 2 / \ / \ 9 6 3 1 /* ...

  8. [LC] 129. Sum Root to Leaf Numbers

    Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...

  9. yum命令不能使用的解决办法

    以前yum命令一直是可用的,今天使用它安装命令时一直提示,如下图: 百度了一圈说是网络问题: 然后我就ping www.baidu.com  可以ping通啊 最后在同事的帮助下找到了解决办法: vi ...

  10. program files 和 program files 86