在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