Spring Boot 配置

Scroll Down

Spring Boot 配置

  1. application.yaml:键: 值
  2. application.properties:键=值

yaml 属性注入

yaml和xml一样,可以完成属性的注入

创建实体类(测试用)

public class Person {
    
    //普通类型
    private String name;
    private int age;
    
    //List类型
    private List<String> hobby;
    
    //Map类型
    private Map<String,Object> cards;

    //日期类型
    private Date date;
    
    //引用类型
    private Dog dog;
}

public class Dog {
    private String name;
    private int age;
}

在类上加上注解

在类上加上这样的注解

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    ...
}

配置yaml

person:
  name: lucas
  age: 19
  hobby:
    - 睡觉
    - 打游戏
  cards: {a: 3222222,b: 122333}
  date: 2010/2/2
  dog: 
    name: abc
    age: 1

这样属性就能注入成功

yaml的好处

yaml的好处不仅限于配置的简单方便快捷,还表现在支持以下两点

  1. 松散绑定
  2. JSR303数据校验

松散绑定

当类中属性名是驼峰命名法,例如:userName

在yaml中可以写成

user-name: lucas

JSR303数据校验

后台进行数据校验

类上需要加上@Validate注解,然后通过在属性上加上一些相关的注解就可以完成校验

具体说明 :

https://my.oschina.net/lidaoyuan/blog/3017737

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

Properties属性注入

  • @PropertySource: 加载指定的配置文件

  • **@configurationProperties:**默认从全局配置文件中获取值

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

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

    ......  
}

配置文件占位符

配置文件甚至可以使用随机数注入

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

内容参考:https://mp.weixin.qq.com/s?__biz=Mzg2NTAzMTExNg==&mid=2247483744&idx=1&sn=b4ec762e71b2ddf9403c035635299206&scene=19#wechat_redirect

yaml 多环境切换

server:
  port: 8081
spring: 
  profiles:
    active: dev

---
server:
  port: 8082
spring:
  profiles: dev
---
server:
  port: 8083
spring:
  profiles: pro

通过---进行分割

通过profiles取名

通过active进行激活

自动配置的原理

参考:https://mp.weixin.qq.com/s?__biz=Mzg2NTAzMTExNg==&mid=2247483766&idx=1&sn=27739c5103547320c505d28bec0a9517&scene=19#wechat_redirect

  1. SpringBoot启动会加载大量的自动配置类

  2. 我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;

  3. 我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)

  4. 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;

**xxxxAutoConfigurartion:自动配置类;**给容器中添加组件

xxxxProperties:封装配置文件中相关属性