我想传递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
的长度。
我认为没有办法将集合作为作业参数传递。你可以
- 将字符串拆分为每个字符串250个字符,并以多个参数发送
- 将参数保存在临时表或文件中,并在需要的地方读取。
请检查这些线程
如何发送自定义对象作为作业参数在Spring批处理?
ArrayList不能强制转换为org.springframework.batch.core.JobParameter