SpringBoot 配置文件的使用

SpringBoot 配置文件的使用

前言

配置文件的使用会从 properties 开始介绍,后介绍 yml 和 读取配置文件

properties

使用properties配置的格式,缺点不易阅读

# 设置控制台日志的输出格式
logging.pattern.console = %d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %C - %m%n
# 设置文件日志的输出格式
logging.pattern.file = %d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %C - %m%n
# 设置日志文件的名称以及保存的位置
logging.file.name = logs/test.log
# 设置日志的默认输出级别
logging.level.root = info
# 设置滚动日志(默认的滚动策略是文件大小结合日期进行滚动)
# ${LOG_FILE}引用springboot默认文件输出位置
logging.logback.rollingpolicy.file-name-pattern = ${LOG_FILE}.%d{yyyy-MM-dd}.%i.log
# 设置滚动日志的大小(默认10MB)
logging.logback.rollingpolicy.max-file-size = 20MB
# 保留滚动日志的历史天数(默认只保存近7天的日志文件)
logging.logback.rollingpolicy.max-history = 30
# 一直保持彩色日志(例如在单元测试中输出的日志)
spring.output.ansi.enabled = always

yml

yml是一种主流的资源配置文件,具有缩进功能,阅读性更好,
每个父子节点使用冒号分隔,赋值的节点冒号后一定要有空格

spring:
  output:
    ansi:
      #一直保持彩色日志
      enabled: always
# 日志设置
logging:
  pattern:
    # 设置控制台日志的输出格式
    console: "%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %C - %m%n"
    file: "%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %C - %m%n"
  file:
    # 设置日志文件的名称以及保存的位置
    name: logs/test.log
  level:
    # 默认输出级别
    root: info
  # logback滚动日志设置
  logback:
    rollingpolicy:
      # 日志文件保留的历史天数
      max-history: 30
      # 滚动文件大小
      max-file-size: 20MB

读取配置文件

yml数据绑定示例

值绑定

使用@Value注解精确指定节点的名称

@Component
@Data
public class Student {
    //使用@Value注解和SPEL表达式将yml的节点值绑定到类的字段上
    @Value("${student.userId}")
    private Integer stuId;
    @Value("${student.userName}")
    private String stuName;
    @Value("${student.age}")
    private Integer age;
}

松散绑定

使用@ConfigurationProperties注解,松散绑定只需要指定节点的前缀即可,子节点在yml中可以依据约定
使用驼峰模式(如:userName)、"-"线(如:user-name)、或者全大写加下划线(如:USER_NAME)进行绑定即可

@Component
@Data
@ConfigurationProperties(prefix = "student")
public class Student {
    //使用@Value注解和SPEL表达式将yml的节点值绑定到类的字段上
    private Integer userId;
    private String userName;
    private Integer age;

    private Card card;
    private List<Integer> tels;
    private Map<String,Integer> score;
    private List<Teacher> teachers;
}

@Data
class Teacher {
    private String name;
    private Integer age;
}

@Data
class Card {
    private Integer cardNum;
}

配置文件

# 数据值绑定
student:
  userId: 1001
  user-name: user
  age: 21
  card:
    card-num: 330444
  # 绑定array、list、set集合,多个值使用逗号分隔,
  # 或者使用"-"线换行分隔
  tels: #13509876543, 18689098765
    - 93045983
    - 93045983
  # 绑定map
  score:
    s: 75
    ss: 24
    ssr: 1
  # 绑定复杂类型(集合中包含对象)
  teachers:
    - name: cq
      age: 18

    - name: sb
      age: 16