假设我的一个配置文件中有以下属性(例如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?如果是这样,究竟是怎么回事?
答案 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。