我如何传递一个集合作为Spring批处理JobParameter?



我想传递String的集合作为步骤参数。因为我没有找到为collection构造JobParameter的方法,所以我决定将其作为带有逗号分隔值的字符串传递。

执行作业的代码:

@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)

由于作业参数是作为列值存储的,所以我不能将太长的字符串作为参数传递。

你能建议我如何克服它吗?

String类型的作业参数默认长度为250,参见BATCH_JOB_EXECUTION_PARAMS。Spring Batch提供的脚本只是一个起点,您可以根据需要更新它们。因此,在您的情况下,您需要根据需要增加BATCH_JOB_EXECUTION_PARAMS#STRING_VAL的长度。

我认为没有办法将集合作为作业参数传递。你可以

  1. 将字符串拆分为每个字符串250个字符,并以多个参数发送
  2. 将参数保存在临时表或文件中,并在需要的地方读取。

请检查这些线程
如何发送自定义对象作为作业参数在Spring批处理?
ArrayList不能强制转换为org.springframework.batch.core.JobParameter

相关内容

  • 没有找到相关文章

最新更新