Spring boot 读取YAML 到配置类

Spring boot 读取YAML 到配置类

前言

一直对yaml 语法不是很熟悉,恰巧这次抽空熟练一下,结合配置类做个映射。含日期的处理 date,dateTime, localDate, localDateTime。需要注意日期格式的映射,还有就是Key 大小写的问题。

Java 配置类

package com.zlv11.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Component;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author lvzb
 * @date 2022/11/15  14:09
 **/
@Component
@Data
@ConfigurationProperties(prefix = CommonConfig.prefix)
public class CommonConfig {

    public static final String prefix = "common-config";

    private String name;
    private Integer age;
    private Date birthday;
    private Date birthdayTime;
    private LocalDate birthdayLocalDate;
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private LocalDateTime birthdayLocalDateTime;
    private List<String> brothers;
    private List<Person> brothersList;
    private Map<String, String> othersObj;


    @Data
    public static class Person implements Serializable {
        private String name;
        private Integer age;
        private String hobby;
    }

}

yaml 配置

yaml 配置里 映射 java Date 默认格式只能是 yyyy/MM/dd, 网上有些帖子说 yyyy-MM-dd能行,亲测会报错。对于 yaml 到 Java 的 LocalDateTime 映射,我这里取巧使用了 注解 @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") 才成功,其它方式都是会报错,如有知道具体默认格式,还请留言告知。

## 测试yaml读取
common-config:
  name: zlv11
  age: 25
  #日期必须使用yyyy/MM/dd, yyyy-MM-dd,yyyyMMdd都会报错
  birthday: 1999/06/21
  birthdayTime: 1999/06/21 01:01:01
  #LocalDate必须使用yyyy/MM/dd, 加了时分秒都会报错
  birthdayLocalDate: 1999/06/21
  birthdayLocalDateTime: 1999-06-21 11:49:31
#  birthdayLocalDateTime: 1999-06-21 11:49:31    #错误
#  birthdayLocalDateTime: 1999/06/21T11:49:31    #错误
  othersObj:
    k1: aa
    k2: bb
    k3: cc
    k4: 789456
    k5:
      k5k6: 1999/00/00
  brothers:
    - jjin8
    - zlv11
    - zhihao1
    - ygr1
  brothersList:
    -
      name: jjin8
      age: 31
    -
      name: zlv11
      age: 24
    -
      name: zhihao1
      age: 12

测试执行结果

package com.zlv11.properties;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @author lvzb
 * @date 2022/11/15  14:09
 **/
@Slf4j
@SpringBootTest
class CommonConfigTest {

    @Autowired
    private CommonConfig commonConfig;

    @Test
    void toStringTest() {
        log.warn(">>>>> commonConfig :: {}", commonConfig);
    }
}

控制台将会输出:

2022-11-15 15:10:31.352  WARN 33036 --- [           main] com.zlv11.properties.CommonConfigTest    : >>>>> commonConfig :: CommonConfig(name=zlv11, age=25, birthday=Mon Jun 21 00:00:00 CST 1999, birthdayTime=Mon Jun 21 01:01:01 CST 1999, birthdayLocalDate=1999-06-21, birthdayLocalDateTime=1999-06-21T11:49:31, brothers=[jjin8, zlv11, zhihao1, ygr1], brothersList=[CommonConfig.Person(name=jjin8, age=31, hobby=null), CommonConfig.Person(name=zlv11, age=24, hobby=null), CommonConfig.Person(name=zhihao1, age=12, hobby=null)], othersObj={k1=aa, k2=bb, k3=cc, k4=789456, k5.k5k6=1999/00/00})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值