yml配置文件中使用中文注解
问题
我们在yml中写注解一般是这样的 #xxxx
当我们启动时我们会遇到这样的问题
Failed to load property source from
‘file:/D:/idea/bonc/server/monitor-streaming/target/classes/application.yml’
(classpath:/application.yml)
根本原因
因为我们在的yml的文件格式时GBK的 我们的中文注释在target文件中是乱码的
解决
修改文件格式 文件格式都改为UTF-8
yml配置文件简单语法及小坑
yml文件使用方法
1-语法
K : (空格)V
表示一对键值对,以空格缩进来控制层级关系,只要左对齐的一列数据,都是一个层级的。属性和值是大小写敏感
2-写法
普通值
- 字符串默认不加单引号或者双引号;
- 双引号,不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思
- 单引号:会转义特殊字符,特殊字符只会是一个普通的字符串数据
- 特殊情况:如 00013 ,类似的数值要加上单引号,否则读取时会出错。
对象,map(属性和值) (键值对)
1 2 3 4 5 6 7 | user: userName: "小明" boss: true birth: 2022/07/13 age: 20 ##============行内写法 user: { userName : "小明" , boss : true , birth : 2022/07/13 , age : 20 } |
数组(List,Set)
用 – 值 表示数组中的一个元素
1 2 3 4 5 6 | pets: - cat - dog - pig #=====行内 pets: [ cat , dog , pig ] |
举个栗子:
pet实体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package cn.maggie.bussiness.entity; import lombok.Data; import lombok.ToString; @Data @ToString public class Pet { /** * 名字 */ private String name; /** * 体重w */ private String weight; } |
user实体–读取配置组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package cn.maggie.bussiness.entity; import lombok.Data; import lombok.ToString; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; @Component @Data @ToString @ConfigurationProperties (prefix = "user" ) public class User { private String userName; private Boolean boss; private Date birth; private Integer age; private Pet pet; private String [] interests; private List animal; private Map score; private Set salary; private Map> allPets; } |
yml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | user: userName : "小明" boss : true birth : 2022/07/13 age : 20 # 数组 2种写法 # interests: [打球,旅游] interests : - '喝水' - 睡觉 animal : - 阿猫 - 阿狗 # map集合 2种写法 # score: [math: 90,English: 100,chainses: 30] sore : math : 90 english : 100 chainese : 90 # set集合 2种写法 # salary: [22.0,333.90] salary : - 22.90 - 33.80 #对象类型 --键值对 pet : name : 小哈 weight : 9 # map复杂集合 --2种写法 allPets : sick : - { name : 红红 , weight : 99 } - name : niuniu weight : 88 health : [ { name : 胖胖 , weight : 79 } , { name : 小白 , weight : 90 } ] |
测试 -启动类打印输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package cn.maggie.bussiness; import cn.maggie.bussiness.entity.User; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication public class BussinessApplication { public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(BussinessApplication. class , args); User user = run.getBean(User. class ); System.out.println( "============================>" +user.toString()); } } |
配置文件注入值数据校验
@Validated
//JSR303数据校验,此注解加于配置类上
属性可用到的注解
多环境profile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | server: port: 8080 spring: profiles: active: dev #激活,默认就是8080 --- server: port: 8083 spring: profiles: test --- server: port: 8081 spring: profiles: prod #指定属于哪个配置 |
引入此依赖,自定义bean与配置文件绑定时,配置文件会有提醒
1 | org.springframework.bootspring-boot-configuration-processortrueorg.springframework.bootspring-boot-maven-pluginorg.springframework.bootspring-boot-configuration-processor |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。