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 2023-08-31 16:58  曹军  阅读(381)  评论(0编辑  收藏  举报