在Spring Boot中使用 @ConfigurationProperties 註解
Spring Boot 使用一些鬆的規則來綁定屬性到@ConfigurationProperties bean 而且支持分層結構(hierarchical structure)。html
1. 建立一個@ConfigurationProperties bean:
@ConfigurationProperties(prefix = "my", ignoreUnknownFields = false, locations = "classpath:my.yml") public class ApplicationProperties { public User user; @data public class ApplicationProperties { private String userName; private String passWord ; } }
2. 建立my.yml 文件
my: user: user-name: admin pass-word: 123456
注: 使用my.properties 文件也可
上例中用到 @ConfigurationProperties 註解就能夠綁定屬性了。 prefix 用來選擇哪一個屬性的prefix名字來綁定。ignoreUnknownFields = false 告訴 Spring Boot 在有屬性不能匹配到聲明的域的時候拋出異常(方便開發)。web
但須要配合其餘註解。能夠搭配 @Configuration 註解來提供 @Beans 也能夠單獨使用並注入 @Configuration bean。spring
另外一種也可以使用,簡化註解屬性,而後用 Spring的@Autowire來注入 ApplicationProperties bean:app
@ConfigurationProperties(prefix = "my", ignoreUnknownFields = false) public class ApplicationProperties { public User user; @data public class User { private String userName; private String passWord ; } }
啓動測試:測試
package com.yunwen.property; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @RestController @SpringBootApplication @EnableConfigurationProperties({ApplicationProperties.class}) public class TestOne { private static final Logger log = LoggerFactory.getLogger(TestOne.class); @Autowired private ApplicationProperties applicationProperties; @GetMapping("/one") public String one() { log.info("applicationProperties: {}", applicationProperties); return "ok"; } public static void main(String[] args) { //SpringApplication.run(TestOne.class, args); new SpringApplicationBuilder(TestOne.class).web(true).run(args); } }
注: 請注意@EnableConfigurationProperties註解。該註解是用來開啓對@ConfigurationProperties註解配置Bean的支持。也就是@EnableConfigurationProperties註解告訴Spring Boot 能支持@ConfigurationProperties。若是不指定會看到以下異常:ui
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.yunwen.property.ApplicationProperties] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
其餘方法也可, 讓@ConfigurationProperties beans 被添加 用@Configuration或者 @Component註解, 這樣就能夠在 component scan時候被發現。this