我們都知道平常在使用SpringBoot和SpringCloud的時候,如果需要加載一兩個配置文件的話我們通常使用@Value("${屬性名稱}")注解去加載。但是如果配置文件屬性特別多的時候使用這種方式就顯得特別的不友好了。
比如說,我們要加載下方這個名為application.yml的配置文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
kafka: brokerAddress: 110.35.113.62:9092,123.27.143.72:9095,180.17.133.52:9096
smsTopic: testTopic smsCosumeGroup: testTopicGroup
timerTaskTopic: timerTopic timerTaskGroup: timerGroup
jvmNumbers: 3
security: authentication: jwt: secret: 0550224055e1848081dba46d8ad325f503fa141b tokenValidityInSeconds: 86400
|
此時我們有兩種方式來簡化這個加載方式
1
這種方式呢,是同過層層嵌套的方式一層一層的按照配置文件屬性的方式來進行注入的。大家只要把這個類跟上方提供的配置文件進行對比就會明白它的方式了。(注意,下方的所有屬性因為篇幅問題沒有增加get、set方法,實際使用過程中請自行添加)
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
|
@ConfigurationProperties(prefix = "application", ignoreUnknownFields = false) public class ApplicationProperties1 {
private final Security security = new Security();
private final Kafka kafka = new Kafka();
public static class Kafka { private String brokerAddress; private String smsTopic; private String smsCosumeGroup; private String timerTaskTopic; private String timerTaskGroup; private String jvmNumbers; }
public static class Security {
private final Authentication authentication = new Authentication();
public static class Authentication {
private final Jwt jwt = new Jwt();
public static class Jwt {
private String secret;
private long tokenValidityInSeconds; } } } }
|
2
這種方式就是以指定的配置前綴為依據去取配置(同上沒有寫get、set方法)
例如:kafka的配置可以這樣來
1 2 3 4 5 6 7 8 9 10 11 12
|
@Configuration @ConfigurationProperties(prefix = "kafka",ignoreUnknownFields = false) @PropertySource(value = { "classpath:application.yml" },ignoreResourceNotFound=false) public class ApplicationProperties { private String brokerAddress; private String smsTopic; private String smsCosumeGroup; private String timerTaskTopic; private String timerTaskGroup; private String jvmNumbers; }
|
而Security的配置這樣來
1 2 3 4 5 6 7 8 9
|
@Configuration @ConfigurationProperties(prefix = "security.authentication.jwt",ignoreUnknownFields = false) @PropertySource(value = { "classpath:application.yml" },ignoreResourceNotFound=false) public class ApplicationProperties {
private String secret;
private long tokenValidityInSeconds; }
|
補充
大家可能會注意到我上方的幾個類中都沒有寫get和set方法,因為那個東西其實所占的篇幅實在是太長了。那么,有什么辦法可以補救么,其實是有辦法的,一個注解就可以全搞定喲。
什么?你不信,不信來看看呀:IDEA中使用lombok插件
結語
怎么樣,學會這個以后Leader還會擔心你的代碼臃腫么。

本文出自http://zhixiang.org.cn,轉載請保留。