SpringBoot Banner生成网站:https://www.bootschool.net/ascii
在SpringBoot项目的resource目录下,新建一个banner.txt文件,将自定义的banner内容放到文件里面。

快速构建SpringBoot项目网站:https://start.spring.io/

yaml语法讲解

配置文件

SpringBoot使用一个全局的配置文件,配置文件名称是固定的

  • application.properties
    语法结构:key=value

  • application.yml
    语法结构:key:空格 value

配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;

YAML

YAML是一个可读性高,用来表达数据序列化的格式。
YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

标记语言

以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,对比下yaml和xml

yaml配置:

server:port:8080

xml配置:

<server><port>8081</port>
</server>

YAML语法

基础语法:

k:(空格) v

以此来表示一堆键值对(空格不能省略);以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一层级的。

注意:属性和值的大小写都是十分敏感的。

server:port:8081path:/hello

值的写法

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

k:v

字面量直接写在后面就可以,字符串默认不用加上双引号或者单引号;

“” 双引号,不会转义字符串里面的特殊字符,特殊字符会作为本身想表达的意思;
比如:name:"zhang \n san " 输出:zhang 换行 san

# k=v
# 对空格的要求十分高!
# 普通的key-value# 注入到我们的配置类中!name:luxifa# 对象
student:name:luxifaage:3# 行内写法student:{name:luxifa,age:3}# 数组
pets:- cat- dog- pigpets:[cat,dog,pig]

注入配置文件

1.如果要使用properties配置文件可能导入时存在乱码现象,需要在IDEA中进行调整,在这里我们使用yml文件,将默认的application.properties后缀修改为yml

2.导入配置文件处理器

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

3.编写yml配置文件

person:name:luxifa${random.uuid}age:${random.int}happy:truebirth:2022/06/17maps:{k1:v1,k2:v2}lists:- code- music- girldog:name:${person.hello:hello}_旺财age:3

4.在SpringBoot的主程序的同级目录下建包,只有这样,主程序才会对这些类生效;我们建一个pojo的包放入我们的Person类和Dog类;

/*
@configurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数prefix = “person”:将配置文件中的person下面的所有属性--对应只有这个组件是容器中的组件,才能使用容器剔红的@ConfigurationPreperties功能
*/
@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;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;}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;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", happy=" + happy +", birth=" + birth +", maps=" + maps +", lists=" + lists +", dog=" + dog +'}';}}

配置文件除了yml,还有常用的properties,properties配置文件在写中文的时候,会有乱码,需要在IDEA中设置编码格式为UTF-8;
setting–>FileEncodings中配置;

类和文件直接关联,我们使用的是@ConfigurationPerperties的方式,还有一种方式是@value

@Component //注册bean//直接使用@value@value("${person.name}")  //从配置文件中取值private String name;@value("${11*2}")  //# {SPEL} spring表达式private Integer age;@value("true")  //# 字面量private Boolean happy;。。。。。。

这样使用起来并不友好,我们需要为每个属性单独注解赋值,比较麻烦;
功能对比图

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持
  • cp只需要写一次即可,value则需要每个字段都添加
  • 松散绑定:比如在yml中写的是last-name,这个和lastName是一样的,-后面跟着的字母默认是大写的,这就是松散绑定。
  • JSR303数据校验,指可以在字段上增加一层过滤器验证,可以保证数据的合法性
  • 复杂类型封装,yml中可以封装对象,使用@value就不支持

结论:

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

注入配置案例1:

@Component
public class Dog {@Value("旺财")private String name;@Value("3")private Integer age;public Dog() {}public Dog(String name,Integer age) {this.name = name;this.age = age;}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;}
}
@SpringBootTest
class Springboot01ConfigApplicationTests {@Autowiredprivate Dog dog;@Testvoid contextLoads() {System.out.println(dog);}
}

输出结果:

Dog{name='旺财',age=3}

注入配置案例2:

@Component
@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;}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;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", happy=" + happy +", birth=" + birth +", maps=" + maps +", lists=" + lists +", dog=" + dog +'}';}}

application.yml

person:name:luxifa${random.uuid}age:${random.int}happy:truebirth:2022/06/17maps:{k1:v1,k2:v2}lists:- code- music- girldog:name:${person.hello:hello}_旺财age:3
@SpringBootTest
class Springboot01ConfigApplicationTests {@Autowiredprivate Person person;@Testvoid contextLoads() {System.out.println(person);}
}

输出结果:

Person{name='luxifae9eeef60-500e-4476-be44-cda4cf78fcde',age=31706088789,happy=true,birth=Sat Nov 02 00:00:00 CST 2019,maps={k1=v1,k2=v2},lists=[code,music,girl],dog=Dog{name='hello_旺财',age=3}}

注入配置案例3:

@Component
//javaConfig 绑定配置文件的值,可以采取这些方式
//加载指定的配置文件
@PropertySource(value= "classpath:luxifa.properties")
public class Person {//SPEL表达式取出配置文件的值@Value("${name}")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;}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;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", happy=" + happy +", birth=" + birth +", maps=" + maps +", lists=" + lists +", dog=" + dog +'}';}}

luxifa.properties

name=luxifa
@SpringBootTest
class Springboot01ConfigApplicationTests {@Autowiredprivate Person person;@Testvoid contextLoads() {System.out.println(person);}
}

输出结果:

Person{name='luxifa',age=null,happy=null,birth=null,maps=null,lists=null,dog=null}

JSR303数据校验

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

@Component  //注册bean
@ConfigurationProperties(prefix = "person")
@Validated  //数据校验
public class Person {@Email //name必须是邮箱格式private String name;
}
Constraint 详细信息
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式
@Email 被注释的元素必须是电子邮箱地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range 被注释的元素必须在合适的范围内

配置文件占位符

随机数

${random.value}、${random.int}、${random.long}、${random.int(10)}等等

占位符引用其他属性的值,如果不存在可以设置默认值

person:name:luxifa${random.uuid}age:${random.int}happy:truebirth:2022/06/17maps:{k1:v1,k2:v2}lists:- code- music- girldog:name:${person.hello:hello}_旺财age:3

多环境切换

profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境;

方式一:多配置文件
我们在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml,用来指定多个环境配置;
例如:application-test.properties代表测试环境配置 application-dev.properties代表开发环境配置
但是SpringBoot并不会直接启动这些配置文件,它默认使用application.properties主配置文件;我们需要通过一个配置来选择需要激活的环境;

#比如在配置文件中指定使用dev环境,我们可以通过设置不同的端口号进行测试;
#我们启动SpringBoot,就可以看到已经切换到dev下的配置了;
spring.profiles.active=dev

方式二:yml的多文档块
和properties配置文件中一样,但是使用yml去实现不需要创建多个配置文件了,更加方便了

server:port:8081
#选择要激活哪个环境快
spring:profiles:active:prod---
server:port:8083
#配置环境的名称
spring:profiles:dev
---server:port:8084
spring:profiles:prod  #配置环境的名称

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

配置文件加载位置

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

优先级1:项目路径下的config文件夹配置文件
优先级2:项目路径下配置文件
优先级3:资源路径下的config文件夹配置文件
优先级4:资源路径下配置文件

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

SpringBoot之yaml语法、配置文件、多环境切换相关推荐

  1. 深圳Java培训学习:SpringBoot的yml配置及多环境切换【千锋】

    深圳Java培训学习:SpringBoot的yml配置及多环境切换[千锋] 1,配置风格 从application.properties转换到application.yml 并不改变功能效果,只是改变 ...

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

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

  3. Springboot之YAML语法

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

  4. springboot之数据校验及多环境切换

    数据校验及多环境切换 Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理.我们这里来写个注解让我们的age不能超过22: 首先导入依赖 &l ...

  5. SpringBoot之----yaml语法详解

    1.SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的 application.properties 语法结构 :key=value application.yml 语法结构 :ke ...

  6. springboot的yaml属性配置文件注入

    SpringBoot中默认的从application.properties文件中加载参数 我们通常把springboot中资源目录下的application.properties文件改成applica ...

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

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

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

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

  9. SpringBoot:yaml配置及语法、yml数据读取、多环境开发控制

    yaml 配置 YAML(YAML Ain't Markup Language),一种数据序列化格式 优点: 容易阅读 容易与脚本语言交互 以数据为核心,重数据轻格式 YAML文件扩展名 .yml(主 ...

最新文章

  1. 组策略 从入门到精通(十)通过组策略进行软件分发和卸载
  2. Rust 1.33.0 发布,OSC 上堪称“零差评”的编程语言
  3. 二十七、事务隔离级别示例
  4. Java黑皮书课后题第8章:*8.33(几何:多边形的子面积)一个具有四个顶点的凸多边形被分为4个三角形,编写一个程序,提示用户输入4个顶点的坐标,然后以升序显示四个三角形的面积
  5. joomla添加html,html – 向joomla的前端组件视图添加表单
  6. 手工修复Azure DevOps无法连接到Azure的问题
  7. MQTT工作笔记0001---MQTT协议概述
  8. 一个类中域(field)的首字母不要大写
  9. 使用xshell5通过跳板机连接内网服务器
  10. python读取像素值
  11. HD AUDIO For XP SP3 声卡修正补丁下载
  12. 几个常用的后台管理系统
  13. 2017微软骇客马拉松精彩大回Fun:不一样的Hacker,一Young的Cool
  14. 法宝合成时的五行位置分配是什么
  15. 密码框password调用数字键盘
  16. 饥荒联机版连不上服务器_《饥荒》无法连接klei服务器 刷不出服务器解决办法...
  17. 论文阅读 [TPAMI-2022] ManifoldNet: A Deep Neural Network for Manifold-Valued Data With Applications
  18. 循环序列模型总结之LSTM
  19. 重整晋商雄风,再现汇通天下 -------《晋商》阅读笔记第1-4章
  20. matlab流程图程序,matlab程序流程图

热门文章

  1. 第九届“中兴·图灵杯”人工智能程序设计大赛圆满落幕
  2. DHT11(温湿度传感器)的学习
  3. 清华系创企RealAI:独家“隐私保护机器学习”技术,全球首款编译级产品
  4. 服务器文件传输过大提示错误,严重文件传输错误
  5. 4个不同的小球放入3个不同的盒子中(盒子不允许为空),一共有______种不同的放法
  6. hexo yilia主题添加音乐
  7. 唯有自身强大才能呼风唤雨—Intel要携CXL一统互联江湖了吗?
  8. 批量修改PPT字体和颜色的方…
  9. 鸿蒙钉钉app,钉钉鸿蒙版app下载_钉钉鸿蒙版app最新版下载 5.1.25
  10. MySQL深入学习(十八):MySQL8其它新特性