Spring @ConfigurationProperties

作用: 通过与其他注解配合使用,能够实现Bean的按需配置
可以放哪里: 类上,方法上

作用于方法

使用条件: 当将@ConfigurationProperties作用于方法上时,该方法需要有@Bean所属类需要有@Configuration
使用场景: 比较常见的就是配置读写分离的场景

spring.datasource.druid.write.url=jdbc:mysql://localhost:3306/jpa
spring.datasource.druid.write.username=root
spring.datasource.druid.write.password=1
spring.datasource.druid.write.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.druid.read.url=jdbc:mysql://localhost:3306/jpa
spring.datasource.druid.read.username=root
spring.datasource.druid.read.password=1
spring.datasource.druid.read.driver-class-name=com.mysql.jdbc.Driver

@Configuration
public class DruidDataSourceConfig {

    @Bean(name = "readDruidDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.druid.read")
    public DataSource readDruidDataSource() {
        return new DruidDataSource();
    }

    @Primary
    @Bean(name = "writeDruidDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.druid.write")
    public DataSource writeDruidDataSource() {
        return new DruidDataSource();
    }
}

作用于类

使用场景: 配置数据库

# 配置文件内容
spring.datasource.url=jdbc:mysql://127.0.0.1:8888/test?useUnicode=false&autoReconnect=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

@ConfigurationProperties(prefix = "spring.datasource")
@Component
public class DatasourcePro {
    private String url;
    private String username;
    private String password;
    private String driverClassName; // 配置文件中是driver-class-name, 转驼峰命名便可以绑定成
    private String type;
    
    // standard getters and setters
}


@Controller
@RequestMapping(value = "/config")
public class ConfigurationPropertiesController {

    @Autowired
    private DatasourcePro datasourcePro;

    @RequestMapping("/test")
    @ResponseBody
    public Map<String, Object> test(){
        Map<String, Object> map = new HashMap<>();
        map.put("url", datasourcePro.getUrl());
        map.put("userName", datasourcePro.getUsername());
        map.put("password", datasourcePro.getPassword());
        map.put("className", datasourcePro.getDriverClassName());
        map.put("type", datasourcePro.getType());
        return map;
    }
}

总结

1、该注解有一个 prefix 属性,根据指定的前缀来绑定配置文件中的配置
2、@ConfigurationProperties@value 有着相同的功能,@ConfigurationProperties 其实就类似于使用多个 @Value 同时绑定,绑定的是对象
3、 @ConfigurationProperties 修饰的POJO类的命名比较严格,必须和 prefix 的后缀名一致, 不然值会绑定不上。但是配置文件里蛇形命名变量 “driver-class-name” 和 POJO里面转驼峰 命名属性 “driverClassName” 可以绑定成功。

参考:注解@ConfigurationProperties使用方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@ConfigurationPropertiesSpring Boot 中的一个注解,用于将配置文件中的属性映射到 Java 对象中。通过 @ConfigurationProperties 注解,我们可以将配置文件中的属性值注入到一个被 @Component 或 @Configuration 注解的类中作为属性。 使用 @ConfigurationProperties 注解时需要指定一个前缀,该前缀与配置文件中的属性名进行匹配。然后,通过添加对应的 setter 方法,可以将属性值注入到被注解的类的实例中。 例如,假设我们有一个名为 "myapp" 的属性前缀,配置文件中有一个属性 "myapp.name",我们可以通过以下方式进行注解和映射: ```java @Component @ConfigurationProperties(prefix = "myapp") public class MyAppProperties { private String name; // Getter and Setter methods } ``` 在上述示例中,当 Spring Boot 启动时,会自动将配置文件中的 "myapp.name" 属性的值注入到 MyAppProperties 类的实例中的 name 属性。 注意,为了使 @ConfigurationProperties 生效,我们还需要在应用程序的入口处添加 @EnableConfigurationProperties 注解,并指定要扫描的类。 ```java @SpringBootApplication @EnableConfigurationProperties(MyAppProperties.class) public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 这样,我们就可以在应用程序中使用 @Autowired 注解将 MyAppProperties 类注入到其他类中,并使用其中的属性值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值