如何将集合作为spring批处理jobparameter传递?

piah890a  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(335)

我想将字符串集合作为step参数传递。因为我没有找到一个方法 JobParameter 对于collection,我决定将其作为带有逗号分隔值的字符串传递。
执行作业的代码:

@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job myJob;

public void execute() {
    List<String> myCollection = getMyCollection();

    jobLauncher.run(myJob, new JobParameters(ImmutableMap.<String, JobParameter> builder()
            .put("myCollection", new JobParameter(String.join(",", myCollection)))
            .build())
    ...
}

我将步骤定义如下:

@Bean
@StepScope
public Step myStep(@Value("#{jobParameters['myCollection']}") String myCollectionString) {
    List<String> myCollection = ArrayUtil.asList(lisReferencesString.split(","));
    ...
}

但当执行开始时,我得到了一个错误:

org.postgresql.util.PSQLException: ERROR: value too long for type character varying(250)

由于作业参数存储为列值,因此不能将太长的字符串作为参数传递。
你能建议我怎样克服它吗?

tp5buhyn

tp5buhyn1#

我认为您不可能将集合作为作业参数传递。你也许可以
将字符串拆分为每个250个字符,并以多个参数发送它们
将参数保存在临时表或文件中的某个位置,并在需要时读入作业。
请检查这些线
如何在spring批处理中发送自定义对象作为作业参数?
arraylist不能强制转换为org.springframework.batch.core.jobparameter

zkure5ic

zkure5ic2#

string类型的作业参数的默认长度为250,请参阅批处理作业执行参数。springbatch提供的脚本只是一个起点,您可以根据需要进行更新。所以在你的情况下,你需要增加 BATCH_JOB_EXECUTION_PARAMS#STRING_VAL 按要求。

相关问题