ConfigurationProperties——优雅注入配置

461 阅读2分钟

以前最喜欢注入配置的方式就是使用@Value注解,简单、快捷;

但是配置较多的时候,就需要在类中写非常多的@Value并且还要创建相应的变量,这样不仅让代码行数增加了,看起来也不雅观;

对于这种情况,就可以用到我们的ConfigurationProperties了。

1.创建config类

@Component
@ConfigurationProperties(prefix = "user")
@Data
public class UserConfig {

    private String userName;

    private String userId;

}
  • @Component:将类标记为Bean,由Spring管理。

  • @ConfigurationProperties(prefix = "user"):表示这是一个ConfigurationProperties配置类,prefix表示配置的前缀

  • @Data:为类赋予get、set以及构造函数等方法

2.创建完成类后,则需要我们去yml配置文件中写配置

user:
  userName: 默认用户名
  userId: 默认用户ID

注意,这里user就是我们在配置类中的前缀,prefix = "user", 二级中的userName和userId就是和配置类中的字段对应的。如果配置类中的名称是user-name和user-id是这种形式,在配置类中只需要驼峰写法即可匹配,即userName、userId;

3.如果出现多级的情况,可以写内部类

配置文件:

spring:
  application:
    name: xxx
    version: xxx
  datasource:
    driver-class-name: xxx
    url: xxx
    username: xxx
    password: xxx

对于这种多级情况,配置类:

@Component
@ConfigurationProperties(prefix = "spring")
@Data
public class MainConfig {

    @Component
    @ConfigurationProperties(prefix = "spring.application")
    @Data
    public static class ApplicationConfig {

        private String name;

        private String version;
    }

    @Component
    @ConfigurationProperties(prefix = "spring.datasource")
    @Data
    public static class DatasourceConfig {

        private String driverClassName;

        private String url;
        
        private String username;
         
        private String password;

    }

}

当然,这些内部类也可以提出来,但是需要在主类中引用,这里就不做过多赘述了。

4.当前面都配置好了后,就去启动类中添加注解@EnableConfigurationProperties

@EnableConfigurationProperties(value = {UserConfig.class, MainConfig.class})

这里多个配置用","隔开即可,是多层的只需要引入主配置文件即可。

5.在类中注入使用

    @Autowired
    private UserConfig userConfig;
    
    @Autowired
    private MainConfig.ApplicationConfig applicationConfig;
    
    @Autowired
    private MainConfig.DatasourceConfig datasourceConfig;
    
    public void useConfig() {
        // 直接使用即可
        String userName = userConfig.getUserName();
        String applicationName = applicationConfig.getName();
        String driverClassName = datasourceConfig.getDriverClassName();
    }

每次需要使用到配置的时候,只需要引入相应配置类,使用get方法获取即可。 欢迎大家查漏补缺、问题纠正!