SpringBoot系列:@ConfigurationProperties
介绍
@ConfigurationProperties注解的作用是可以根据一个前缀将配置文件的属性映射成一个POJO实体类,只要属性名一致就能自动注入进去,使用起来非常方便
使用在类上
- application.yml文件中有以下配置
spring:
redis:
database: 8
host: 127.0.0.1
port: 6379
password: 123456
- 定义类加载这个配置
package com.itxiaoer.demo.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author : liuyk
*/
@Data
@Component
@ConfigurationProperties(prefix = "spring.redis")
public class RedisConfiguration {
private String database;
private String host;
private String port;
private String password;
}
- 测试
package com.itxiaoer.demo;
import com.itxiaoer.demo.config.RedisConfiguration;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestRedisConfiguration {
private RedisConfiguration redisConfiguration;
@Test
public void redisConfiguration() {
System.out.println("redis database : " + redisConfiguration.getDatabase());
System.out.println("redis host : " + redisConfiguration.getHost());
System.out.println("redis port : " + redisConfiguration.getPort());
System.out.println("redis password : " + redisConfiguration.getPassword());
}
@Autowired
public void setRedisConfiguration(RedisConfiguration redisConfiguration) {
this.redisConfiguration = redisConfiguration;
}
}
使用在方法上
- 配置类
package com.itxiaoer.demo.config;
import lombok.Data;
/**
* @author : liuyk
*/
@Data
public class RedisConfig {
private String database;
private String host;
private String port;
private String password;
}
- 配置
package com.itxiaoer.demo;
import com.itxiaoer.demo.config.RedisConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
/**
* @author : liuyk
*/
@SpringBootApplication
public class DemoSpringBootConfigurationPropertiesApplication {
public static void main(String[] args) {
SpringApplication.run(DemoSpringBootConfigurationPropertiesApplication.class, args);
}
@Bean
@ConfigurationProperties(prefix = "spring.redis")
public RedisConfig redisConfig() {
return new RedisConfig();
}
}
- 测试
package com.itxiaoer.demo;
import com.itxiaoer.demo.config.RedisConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestRedisConfig {
private RedisConfig redisConfig;
@Test
public void redisConfig() {
System.out.println("redis database : " + redisConfig.getDatabase());
System.out.println("redis host : " + redisConfig.getHost());
System.out.println("redis port : " + redisConfig.getPort());
System.out.println("redis password : " + redisConfig.getPassword());
}
@Autowired
public void setRedisConfig(RedisConfig redisConfig) {
this.redisConfig = redisConfig;
}
}
注意
- @ConfigurationProperties没有Component注解的功能,需要手动添加
- 如果配置类不在扫描包下,需要配合@EnableConfigurationProperties(RedisConfiguration.class)来使用
完整代码:https://github.com/liuyukuai/demo-spring-cloud/tree/master/demo-spring-boot-configuration-properties