SpringBoot的@ConfigurationProperties使用

需求

在获取属性文件(application.properties)中的配置时,SpringBoot提供了@Value注解,注入这些属性。但有时我们会遇到这样的需求,我们想把属性文件*中的配置,读取并自动封装成实例类,这样我们在使用的时候就方便多了,SpringBoot提供了ConfigurationProperties注解。

Properties中配置

假设在Application.properties有如下配置:

#MQ消息配置
mq.accessKey = testtesttest
mq.secretKey = testesttesttesttesttest
mq.onsAddr = http://onsaddr-internet.aliyun.com/rocketmq/xxxxxxx
#订单到期关闭延时消息
mq.orderDeadlineClose.topicId = TOPIC_ORDER_DEADLINE_TEST1
mq.orderDeadlineClose.tag =
mq.orderDeadlineClose.producerId = PID_ORDER_DEADLINE_TEST1
mq.orderDeadlineClose.consumerId = CID_ORDER_DEADLINE_TEST1

定义实体类

这时候我们可以定义一个实体类(MqConfig.java)装载配置文件信息:

@Configuration
@ConfigurationProperties(prefix = "mq")
@RefreshScope
public class MqConfig extends RefreshConfig {
​
    private String accessKey;
    private String secretKey;
    private String onsAddr;
​
    // 这边可以以集合方式取得
    private Map<String, String> orderDeadlineClose;
​
    @Bean("orderCloseMQProducer")
    public MQProducer getOrderCloseMQProducer() {
        MQProducer mqProducer = AlimqFactory.createProducer(
                orderDeadlineClose.get("topicId"),
                orderDeadlineClose.get("tag"),
                orderDeadlineClose.get("producerId"),
                onsAddr,
                accessKey, secretKey);
        mqProducer.start();
        return mqProducer;
    }
  ...set and get method...
}

直接定义在@Bean上

@ConfigurationProperties还可以直接定义在@bean的注解上,这时bean实体类就不用@Component和@ConfigurationProperties了

@SpringBootApplication
public class DemoApplication{
​
@Bean
@ConfigurationProperties(prefix = "user")
public MqConfig mqConfig(){
  return new MqConfig();
}
​
public static void main(String[] args) {
  SpringApplication.run(DemoApplication.class, args);
  }
}

然后我们需要使用的时候就直接这样子注入:

@RestController
public class TestController {
​
@Autowired 
MqConfig config;
​
@RequestMapping("test")
public String test(){
  String key = config.getAccessKey();
  return "hello";
}
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注