使用Java類載入SpringBoot、SpringCloud配置檔案
阿新 • • 發佈:2018-12-12
我們都知道平常在使用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,轉載請保留。