随笔- 100  文章- 0  评论- 3  阅读- 30413 

1.概述  

  在学习spring的时候,@ConfigurationProperties应该经常被使用到,作用在类上的时候,将该类的属性取值 与配置文件绑定,并生成配置bean对象,放入spring容器中,提供给其他地方使用。

  在工作中,或者看spring内部代码的时候,无意发现@ConfigurationProperties居然还可以用在方法上,点开@ConfigurationProperties注解的时候,我们发现:

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ConfigurationProperties {

}

  似乎平时我们都是用在类上的,因此特意写这篇文章记录一下,记录@ConfigurationProperties的使用方式。

 

  这种方式的使用场景,等下演示【相同的类,但是配置不同,类似与多数据库。如果复制多个类,与yml一一对应也是可以的,但是显得很傻。重点看场景3】。

 

2.使用场景

  @ConfigurationProperties + @Component + 在类上使用的场景
  @ConfigurationProperties + @EnableConfigurationProperties 在类上使用的场景
  @ConfigurationProperties + @Bean 在方法上使用的场景

3.场景1

复制代码
@Component
@ConfigurationProperties(prefix = "test.config")
@Setter
@ToString
public class TestConfigDemo {

    private String username;

    private String pwd;
}

// yml
test:
  config:
    username: test-config-username
    pwd: test-config-pwd

// 测试代码
@Component
public class TestConfigAppRunner implements ApplicationRunner {

    @Autowired
    TestConfigDemo testConfigDemo;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(testConfigDemo);
    }
}
复制代码

 

4.场景2

 

5.场景3

复制代码
@Configuration
public class HugegraphConfig {

    @Bean("quasiConfig")
    @ConfigurationProperties(prefix = "hugegraph.quasi")
    public AutoHugeClient quasiConfig() {
        AutoHugeClient autoHugeClient = new AutoHugeClient();
        return autoHugeClient;
    }

    @Bean("formalConfig")
    @ConfigurationProperties(prefix = "hugegraph.formal")
    public AutoHugeClient formalConfig() {
        AutoHugeClient autoHugeClient = new AutoHugeClient();
        return autoHugeClient;
    }

    @Bean
    public HugeClient quasiClient(AutoHugeClient quasiConfig) {
        return HugeClient.builder("http://" + quasiConfig.getPath(), quasiConfig.getGraph())
                .configTimeout(quasiConfig.getTimeout())
                .configUser(quasiConfig.getUsername(), quasiConfig.getPassword())
                .build();
    }


    @Bean
    public HugeClient formalClient(AutoHugeClient formalConfig) {
        return HugeClient.builder("http://" + formalConfig.getPath(), formalConfig.getGraph())
                .configTimeout(formalConfig.getTimeout())
                .configUser(formalConfig.getUsername(), formalConfig.getPassword())
                .build();
    }
}
复制代码
复制代码
@Data
@Configuration
public class AutoHugeClient {

    private String path;

    private String graph;

    private Integer timeout;

    private String username;

    private String password;

}
复制代码

 

 posted on   曹军  阅读(428)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2022-08-31 linux中awk的小案例使用
2022-08-31 linux中awk的基础学习
点击右上角即可分享
微信分享提示