SpringBoot 读取 YML 配置文件的几种写法

前言

本文主要介绍 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);
}

}

参考资料