我不知道这是否是一件疯狂的事情,甚至是否有可能。有多种方法可以手动完成,但是我一直很懒惰,看看Spring是否可以为我做这件事。
我有一个Spring Batch流程,需要为每次运行进行配置。由于存在大量可用的配置,并且配置来自不同的来源(主要是不同的Git存储库),具体取决于传递给作业的jobParameters。
当前,当作业开始时,我所有的bean都使用@JobScope定义。我正在使用jGit克隆作业参数中提供的配置,我想使用@Value和@ConfigurationProperties设置Pojo。
示例:
@Data
@ConfigurationProperties
@Validated
public class MyConfiguration{
@NotNull
@Value("${myConfig1}")
private String myConfig1;
...
}
当前,我正在使用以下代码将propertySources添加到环境中:
val loader = new YamlPropertySourceLoader();
List<PropertySource<?>> list = loader.load(name, new FileSystemResource(path));
MutablePropertySources sources = env.getPropertySources();
for (val propertySource : list) {
sources.addFirst(propertySource);
}
但是,如果我同时开始第二个作业,那么环境仍然会将propertySource添加到第一个作业。
是否可以使用@Value但仅从PropertySources列表中初始化此bean(以及以后将需要的其他bean)的方法?请记住,我什至不知道位置,因为它将被检出到一个临时文件夹中。