在 Spring Boot 2 實踐記錄之 條件裝配 一文中,曾經使用 Condition 類的 ConditionContext 參數獲取了配置文件中的配置屬性。但那是由於 Spring 提供了將上下文對象傳遞給 matches 方法的能力。html
對於其它的類,想要獲取配置屬性,能夠創建一個配置類,使用 ConfigurationProperties 註解,將配置屬性匹配到該類的屬性上。(固然,也能夠使用不使用 ConfigurationProperties 註解,而使用 @Value註解)redis
若是要使用 ConfigurationProperties 註解,須要先在 Application 類上添加 @EnableConfigurationProperties 註解:spring
@SpringBootApplication @PropertySource(value = {"file:${root}/conf/${env}/application.properties", "file:${root}/conf/${env}/business.properties"}) @EnableConfigurationProperties public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
假設 properties 文件中有以下配置屬性:app
spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= spring.redis.timeout=2000 spring.redis.pool.max-active=8 spring.redis.pool.max-wait=-1 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0
建立 RedisProperties 類以下:less
@Component @ConfigurationProperties(prefix="spring.redis") @Data Class RedisProperties { private String host; private String port; private String password; private String timeout; private Map<?, ?> pool; }
引入這個 Bean,就能夠讀取到相應的屬性了。spa
注意,全部的屬性必須有 Setter 和 Getter 方法,上例中,使用了 lombok 的 Data 註解,它會自動爲私有屬性添加 Setter 和 Getter 方法)。code
還要注意屬性的類型,若是是獲取最後一級的配置屬性,類型爲 String,若是不是最後一級,則類型爲 Map。htm
import lombok.extern.slf4j.Slf4j; @Slf4j Class RedisPropertiesTest { @Autowired private RedisProperties redisProperties; public void test() { log.info(redisProperties.getHost()); Map<?, ?> pool = (Map) redisProperties.getPool(); log.info(pool.get("min-idle").toString()); } }
打印出來的結果是:對象
127.0.0.1 0