ConfigurationProperties 大小写 configuration data

@ConfigurationProperties注解你真的会使用吗?

@ConfigurationProperties是Spring框架提供的一个注解,其作用是把属性文件配置参数映射到java的bean属性中。这个功能非常强大,可以很方便的帮助我们处理配置文件和Java对象的属性值注入,在Spring及SpringBoot框架或者其他开源框架中这个注解使用频率非常的高,非常典型的案例就是常用于数据源的配置。想必很多开发同学用过这个注解或者看到过这个注解的用法,但是你真的了解这个注解有几种使用场景吗?是不是看到不同框架可以这样用,也可以那样用觉得有点迷惑?本文将为你介绍@ConfigurationProperties注解的几个正确用法,彻底解决你的疑惑,保证提高你在面试官面前添加加分项。

?使用方法一

@ConfigurationProperties注解作用在一个普通的类中,这是一个普通的Java类

@ConfigurationProperties(prefix = "spring.datasource.druid")
public class DruidDataSoureProperties {
private String url;
private String username;
private String password;
}

属性文件配置:

?spring.datasource.druid.url=jdbc:mysql://:/test?
spring.datasource.druid.username=test
spring.datasource.druid.password=test123

然后在配置类使用这个配置bean

@Configuration
@EnableConfigurationProperties({DruidDataSoureProperties.class})
public class DruidDataSourceConfig {
  // 直接注入
   @Autowired
   DruidDataSoureProperties dataSoureProperties;
    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
        dataSource.setUrl(dataSoureProperties.getUrl());
        dataSource.setUsername(dataSoureProperties.getUsername());
        dataSource.setPassword(dataSoureProperties.getPassword());
        return dataSource;
    }
    //或者可以这样
    @Bean
    public DataSource dataSource( DruidDataSoureProperties dataSoureProperties) {
        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
        dataSource.setUrl(dataSoureProperties.getUrl());
        dataSource.setUsername(dataSoureProperties.getUsername());
        dataSource.setPassword(dataSoureProperties.getPassword());
        return dataSource;
    }
}

通过@
EnableConfigurationProperties 注解后可以将一个带有@ConfigurationProperties注解的普通类与配置文件参数自动映射,从而交给sping容器实例化可以正常的获取到bean.

?使用方法二

@ConfigurationProperties 注解作用在@Configuration或@Component注解的类上,其实@Configuration是一个复合注解,他包含了@Component注解,如下面的java类:

@ConfigurationProperties(prefix = "spring.datasource")
@Configuration
public class DataSoureProperties {
    private String url;
    private String username;
    private String password;
}

这种方式和第一种的区别就是多了一个@Configuration配置类注解,这就可以不再需要使用@
EnableConfigurationProperties注解了,具体使用方式如下:

@Configuration
public class DruidDataSourceConfig {
    @Autowired
    DruidDataSoureProperties dataSoureProperties;
}

?使用方法三

在@Configuration注解的类中带有@bean注解的方法上使用@ConfigurationProperties注解,可以把属性映射到方法返回的对象属性中,如以下配置可以把前缀为spring.datasource属性文件参数注入到DataSource属性中

@Configuration
public class MyDataSourceConfig {
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource() {
        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
        return dataSource;
    }
}


总结

第一种方式多用与外部模块,因为外部模块的包名和自己项目包名一般不一样,spingboot扫描不到属性配置,所以需要在本项目的环境中配合@
EnableConfigurationProperties 注解来完成容器化。

第二种方式刚好是第一种的互补,如果是在一个项目中,可以直接使用第二种方式,因为包的扫描可以直接扫描到本项目中的@Configuration注解。

第三种比较灵活,不需要额外再创建一个配置类,但是如果需要多次注入属性代码就会重复,也就是属性配置类不能复用

以上就是@ConfigurationProperties 这个注解的三种不同使用方式以及他们的区别,具体在不同场合使用不同的方式。

原文链接:,转发请注明来源!