• 作者:老汪软件技巧
  • 发表时间:2024-11-29 07:04
  • 浏览量:

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

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

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

1.创建config类

@Component
@ConfigurationProperties(prefix = "user")
@Data
public class UserConfig {
    private String userName;
    private String userId;
}

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方法获取即可。欢迎大家查漏补缺、问题纠正!


上一条查看详情 +如何将Spring Cloud Task发布Data Flow上执行?
下一条 查看详情 +没有了