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