动态加载PropertySources以实例化JobScoped Bean

时间:2018-11-13 10:31:32

标签: spring spring-boot spring-batch

我不知道这是否是一件疯狂的事情,甚至是否有可能。有多种方法可以手动完成,但是我一直很懒惰,看看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)的方法?请记住,我什至不知道位置,因为它将被检出到一个临时文件夹中。

0 个答案:

没有答案