使用 @ConfigurationProperties 注入配置資訊之二
阿新 • • 發佈:2019-02-04
在上一篇部落格中,我們的屬性配置類FooProperties通過使用@ConfigurationProperties註解實現了配置資訊的注入;然後又通過使用@EnableConfigurationProperties註解才使得配置bean被創建出來。其實,@EnableConfigurationProperties這個註解也會自動應用到專案中,同時,系統中任何被 @ConfigurationProperties 標註的“已經存在”的 bean 都會從系統環境中載入配置資訊。也就是說,我們可以像下面這樣簡化上一篇部落格中的配置。
- 配置資訊
# ConfigurationProperties 學習,見 spring boot 文件第 24.7小節 foo.enabled=false foo.remote-address=192.168.1.1 foo.security.username=user foo.security.password=pwd foo.security.roles=USER,ADMIN
- 屬性配置類 - bean
/** * 對比 {@link FooProperties} * * 事實上,{@link EnableConfigurationProperties} 已經自動將 Environment * * 中的配置應用到了被 {@link ConfigurationProperties} 註解的"bean"上 * * 所以該類的配置等同於 {@link FooProperties} 和 {@link TestPropertiesConfiguration} 的組合配置 */ @Component @ConfigurationProperties(prefix = "foo") public class BarProperties { private boolean enabled; private InetAddress remoteAddress; private Security security; public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public InetAddress getRemoteAddress() { return remoteAddress; } public void setRemoteAddress(InetAddress remoteAddress) { this.remoteAddress = remoteAddress; } public Security getSecurity() { return security; } public void setSecurity(Security security) { this.security = security; } public static class Security { private String username; private String password; private List<String> roles = new ArrayList<>(Collections.singleton("USER")); public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public List<String> getRoles() { return roles; } public void setRoles(List<String> roles) { this.roles = roles; } @Override public String toString() { return "{ " + "username='" + username + '\'' + ", password='" + password + '\'' + " }"; } } @Override public String toString() { return "{ " + "enabled=" + enabled + ", remoteAddress=" + remoteAddress + ", security=" + security + " }"; } }
- 例項化屬性配置bean
@Service public class BarServiceImpl implements BarService { private static final Logger logger = LoggerFactory.getLogger(BarServiceImpl.class); private BarProperties barProperties; @Autowired public BarServiceImpl(BarProperties barProperties) { this.barProperties = barProperties; } /** * 這個註解在這裡沒實際用處,就是為了方便在該類構造完成後列印日誌,看看配置資訊是否載入到配置類中了 */ @PostConstruct public void verifyConfigurationProperties() { logger.info("BarProperties: {}", barProperties); } }
- 驗證配置資訊是否載入到屬性配置bean中