前言
本文主要介绍 SpringBoot 读取 YML 配置文件的几种写法。
提示
SpringBoot 属性绑定注解的介绍请参考 这里 的教程。
第一种写法
添加 @Configuration
注解到 Bean 定义类,并使用 @Value
注解指定 YML 配置文件中的 Key
。
1 2 3 4 5 6
| shop: wechat: app-id: '' app-secret: '' encoding-token: '' encoding-aes-key: ''
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Data @Configuration public class WechatProperties {
@Value("${shop.wechat.app-id:}") private String appId;
@Value("${shop.wechat.app-secret:}") private String appSecret;
@Value("${shop.wechat.encoding-token:}") private String encodingToken;
@Value("${shop.wechat.encoding-aes-key:}") private String encodingAesKey;
}
|
第二种写法
添加 @Configuration
和 @ConfigurationProperties
注解到 Bean 定义类,并使用 YML 配置文件中 Key
作为前缀。值得一提的是,这里即使不加 @Value
注解,SpringBoot 也会根据驼峰命名规则自动转换并匹配 Bean 定义类的属性名称。
1 2 3 4 5 6
| shop: wechat: app-id: '' app-secret: '' encoding-token: '' encoding-aes-key: ''
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Data @Configuration @ConfigurationProperties(prefix = "shop.wechat") public class WechatProperties {
private String appId;
private String appSecret;
private String encodingToken;
private String encodingAesKey;
}
|
第三种方式
添加 @Configuration
和 @ConfigurationProperties
注解到 Bean 定义类,并使用内部类和 YML 配置文件中 Key
作为前缀。值得一提的是,这里即使不加 @Value
注解,SpringBoot 也会根据驼峰命名规则自动转换并匹配 Bean 定义类的属性名称。
1 2 3 4 5 6 7 8 9
| shop: mail: 'example@gmail.com' wechat: app-id: '' app-secret: '' encoding-token: '' encoding-aes-key: '' security: web-allow-others: true
|
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
| @Data @Configuration @ConfigurationProperties(prefix = "shop") public class ShopProperties {
private String mail;
private final Wechat wechat = new Wechat();
private final Security security = new Security();
private static class Wechat {
private String appId;
private String appSecret;
private String encodingToken;
private String encodingAesKey;
}
public static class Security {
private boolean webAllowOthers;
}
}
|
第四种方式
添加 @ConfigurationProperties
和 @NestedConfigurationProperty
注解到 Bean 定义类,并使用 @EnableConfigurationProperties
注解对 Bean 定义类的属性进行绑定
1 2 3 4 5 6 7 8
| xxl: job: admin: addresses: '' executor: port: 9913 ip: '' address: ''
|
1 2 3 4 5 6 7 8 9 10 11
| @Data @ConfigurationProperties(prefix = "xxl.job") public class XxlJobProperties {
@NestedConfigurationProperty private XxlAdminProperties admin = new XxlAdminProperties();
@NestedConfigurationProperty private XxlExecutorProperties executor = new XxlExecutorProperties();
}
|
1 2 3 4 5 6
| @Data public class XxlAdminProperties {
private String addresses;
}
|
1 2 3 4 5 6 7 8 9 10
| @Data public class XxlExecutorProperties {
private String ip;
private Integer port;
private String address;
}
|
1 2 3 4 5 6 7 8 9
| @SpringBootApplication @EnableConfigurationProperties(XxlJobProperties.class) public class ShopApplication {
public static void main(String[] args) { SpringApplication.run(ShopApplication.class, args); }
}
|
参考资料