springboot 学习(二) 配置文件

 

springboot在底层已经自动配置了很多东西,但有些东西我们是不需要或者需要改的,比如数据源

springboot提供一个全局的配置文件,供我们修改他的默认值

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

两种格式的语法:

  • 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

 

两者对比:

springboot 学习(二) 配置文件

 

 

 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;

    }

结果如下:

springboot 学习(二) 配置文件

 

 各种检查如下:

springboot 学习(二) 配置文件

 

 

上一篇:vue3 setup 组合式api


下一篇:JavaWeb18(JSP标签、JSTL标签、EL表达式 )