一次复制多个配置属性

时间:2018-03-23 18:23:15

标签: spring spring-boot spring-el

假设我的一个配置文件中有以下属性(例如application.yaml):

 my.first.prefix:
   a: value-a
   b: value-b
   c:
     c1: something
     c2: something-else

我想将所有这些值复制到另一个"前缀",例如到my.second.prefix而不列出具有此前缀的所有属性(即不执行my.second.prefix.a: ${my.first.prefix.a}等)。

最终结果是我可以在表单的配置中使用此副本:

@Data
@Configuration
@ConfigurationProperties(prefix = "my.second.prefix")
public class Config {
    private String a;
    // etc.
}

而且我不需要改变"复制机制"每次我添加一个新属性,只有原始属性源和java配置。

使用纯SpEL可以实现吗?或者这可能只是programmaticaly?如果是这样,究竟是怎么回事?

1 个答案:

答案 0 :(得分:1)

也许您可以像往常一样绑定my.first.prefix属性,例如:

@Configuration
@ConfigurationProperties(prefix = "my.first.prefix")
public class Config {
    ...
}

然后将此bean注入另一个@Configuration类,您可以在其中执行 copy 的工作:

@Configuration
public class SecondConfigClass {
    @Autowired
    private Config config;

    @Bean
    @Primary
    public Config secondConfig(){
        Config secondConfig = new Config();
        BeanUtils.copyProperties(config, secondConfig);
        // do some stuff on secondConfig's properties...
        return secondConfig;
    }
}

然后你可以照常使用第二个配置bean。使用此解决方案,您可以使* .properties文件保持简单,而无需复制/克隆/重命名属性。

注意:BeanUtils类是Spring核心的一部分:doc