• @ConfigurationProperties的使用方式



    注解介绍

    ConfigurationProperties注解主要用于将外部配置文件配置的属性填充到这个**Spring Bean实例**中。

    需要注意:它自己单独使用无效,需要配合其它注解一起使用。且对于Spring Bean才生效,普通的new 对象不生效。

    ConfigurationProperties的使用方式:

    1. @ConfigurationProperties + @Component(或其它实例化Bean的注解)注解到bean定义类上
    2. @ConfigurationProperties + @Bean注解到配置类的bean定义方法上
    3. @ConfigurationProperties注解到普通类,然后通过@EnableConfigurationProperties定义为bean

    使用方式

    配置文件:

    sftp:
      host: 127.0.0.1
      port: 22
      username: admin
      password: 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1. @ConfigurationProperties + @Component

    @ConfigurationProperties + @Component(或其它实例化Bean的注解)注解到bean定义类上

    @Data
    @Component
    // @Configuration
    @ConfigurationProperties(prefix = "sftp")
    public class Sftp {
    
        private String host;
    
        private String port;
    
        private String username;
    
        private String password;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2. @ConfigurationProperties + @Bean

    @ConfigurationProperties + @Bean注解到配置类的bean定义方法上

    @Data
    public class Sftp {
    
        private String host;
    
        private String port;
    
        private String username;
    
        private String password;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    @Configuration
    public class BeanConfig {
    
        @Bean
        @ConfigurationProperties(prefix = "sftp")
        public Sftp sftp() {
            return new Sftp();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    此种用法遇到的坑:重复使用@ConfigurationProperties
    如果将代码改成这样:

    @Data
    @ConfigurationProperties(prefix = "sftp")
    public class Sftp {
    
        private String host;
    
        private String port;
    
        private String username;
    
        private String password;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    @Configuration
    public class BeanConfig {
    
        @Bean
        @ConfigurationProperties(prefix = "aaaa")
        public Sftp sftp() {
            return new Sftp();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这种方式上有@ConfigurationProperties注解,且类上也有@ConfigurationProperties注解的,只有方法上的@ConfigurationProperties会生效(可以理解为类上的注解方法的给重写了)。

    3. @ConfigurationProperties + @EnableConfigurationProperties

    @ConfigurationProperties注解到普通类,然后通过@EnableConfigurationProperties定义为bean

    @Data
    @ConfigurationProperties(prefix = "sftp")
    public class Sftp {
    
        private String host;
    
        private String port;
    
        private String username;
    
        private String password;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    @SpringBootApplication
    @EnableConfigurationProperties(value = {Sftp.class})
    public class SpringbootApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    Rsync远程同步+inotify监控
    多线程(73)什么时候应该使用自旋锁而不是阻塞锁
    抢跑前装量产赛道,这家自动驾驶公司为何要自研域控制器?
    Java学习笔记——字符串
    基于 nodejs+vue城市轨道交通线路查询系统mysql
    流式结构化数据计算语言的进化与新选择
    【mysql学习笔记23】索引优化
    【设计模式】设计模式
    Maven
    vue--vuex 中 Modules 详解
  • 原文地址:https://blog.csdn.net/JokerLJG/article/details/127920496