在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
相關文章
相關標籤/搜索