在SpringBoot中使用@ConfigurationProperties简化多个@Value

在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

转载并验证: http://www.javashuo.com/article/p-qbgxjvdw-dm.html
相关文章
相关标签/搜索