springboot 学习(二) 如何修改配置文件,以及yaml文件的使用和多套springboot配置


 

继springboot 学习(一) 接下来将如何修改springboot配置文件,这个文件配置可以修改各个类的属性值,前提是这个类有这个注解@ConfigurationProperties

这个配置文件名称固定,但可以使用两种格式:application.yaml,application.properties

 


配置文件所在可以在如下几个位置:来自官方的图

 

1 表示的是项目路径下得config目录

2 项目路径

3 表示资源文件下的config目录

4 表示资源目录下

可以在以上各个路径下都配置application.properties文件,但是有优先级,优先级分别是1>2>3>4

 

拓展,运维小技巧

指定位置加载配置文件

我们还可以通过spring.config.location来改变默认的配置文件位置

项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;这种情况,一般是后期运维做的多,相同配置,外部指定的配置文件优先级最高

 

java -jar spring-boot-config.jar --spring.config.location=F:/application.properties

 

 

yaml文件的使用:

两种格式的语法:

  • application.properties

    • 语法结构 :key=value

  • application.yml

    • 语法结构 :key:空格 value

官网强烈推荐yaml格式

何为yaml?

yaml是以数据为中心的,一种记录数据的标记语言

yaml的基础语法:声明:语法要求严格!

  • 空格不能省略
  • 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
  • 属性和值的大小写都是十分敏感的。

1,基本数据类型及string   K: V形式

value的值可以直接写, 字符串默认不用加上双引号或者单引号;

  name: 黄易安
  age: 27

注意:

  • “ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;

    比如 :name: "kuang \n shen"   输出 :kuang  换行   shen

  • '' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出

    比如 :name: ‘kuang \n shen’   输出 :kuang  \n   shen

2,map类型的

maps: {k1: v1,k2: v2}
#或者
maps:
    k1: v1
    k2: v2

3,数组类型的

  list:
    - code
    - music
    - girl
#或者
  list:[code,music,girl]

4,对象类型,类名及其属性

  dog:
    name: 旺财
    age: 3

 

yaml文件可以直接向实体类注入值:使用注解@ConfigurationProperties ,后面跟的"people"即下面的yaml文件的k值

对应实体类创建:

@Component
@Data
@ConfigurationProperties("people")
public class people {
    
    private String name;
    private Integer age;
    private Dog dog;
    private boolean happy;
    private Date birth;
    private Map<Object,Object> maps;
    private List<Object> list;
    }

对应yaml:

people:
  name: 黄易安
  age: 27
  dog:
    name: 旺财
    age: 3
  happy: true
  birth: 2021/09/07
  maps: {k1: v1,k2: v2}
  list:
    - code
    - music
    - girl

当使用properties时,也可以导入值,但比较麻烦,方法如下:

使用注解:@PropertySource(value = "classpath:person.properties")  导入对应配置文件

在通过spring表达式,${}获取对应配置文件里的值

@PropertySource(value = "classpath:person.properties")
@Component 
public class Person {

    @Value("${name}")
    private String name;

    ......  
}

这种方法需要一个一个匹配,不能像yaml一样,全部匹配~

 

yaml可以使用spring表达式,如下,当然了@value也可以使用

person:
    name: qinjiang${random.uuid} # 随机uuid
    age: ${random.int}  # 随机int
    happy: false
    birth: 2000/01/01
    maps: {k1: v1,k2: v2}
    lists:
      - code
      - girl
      - music
    dog:
      name: ${person.hello:other}_旺财
      age: 1

 

两者对比:

 

 

 1,configurationproperties可以自己匹配,但当K值和pojo类的属性不一致时,pojo的类属性值会为null

2,松散绑定,驼峰转换,pojo类里 userName,yaml里 user-name ,会自动转换,匹配成功

3,spel,即${}

4,  303校验,可以在类上使用@Validated开启校验,并通过对应例如,邮箱格式检查@Email在属性注解,进行校验,如下:

@Component
@Validated
@ConfigurationProperties("people")
public class people {
    @Email
    private String name;
    private Integer age;
    private Dog dog;
    private boolean happy;
    private Date birth;
    private Map<Object,Object> maps;
    private List<Object> list;

    }

结果如下:

 

 各种检查的注解如下:

@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 对象是否符合正则表达式的规则

.......等等
除此以外,我们还可以自定义一些数据校验规则

 

 

配置多套环境:

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本,如下

配置两套环境,分别是dev测试,prod生产

 

如何使用呢,如下:

---这是分割线,表示在同一个yanl中,可以进行多个配置,

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

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM