批次4.0.1-作业开始,但jobParametersValidator为空

时间:2018-07-09 03:04:07

标签: java spring spring-batch

我正在将Spring Batch集成到现有的Spring Webapp中,并创建了三个简单的作业作为学习过程。然后,我为作业/读取器/写入器创建了一组祖先类,可用于轻松迁移我们的旧批处理作业。

我们打算在Tomcat中作为单独的线程异步运行作业。我创建了一个UI来管理和启动/停止它们。

我有一个用@Configuration和@EnableBatchProcessing注释的类,它负责为批处理模式设置所有全局类。然后,它还会针对特定祖先类别扫描所有工作的基本软件包。然后为相应的* Factory类添加每个类名的后缀,为该类做一个getBean并使用它注册每个作业:

Job job = jobFactory.createInstanceForRegistration();
jobRegistry.register(new ReferenceJobFactory(job));

createInstanceForRegistration方法使用applicationContext.getBean获取job / read / writer类的实例,以将作业和步骤放在一起,然后最终:

((SimpleJob)job).setSteps(steps);
return job;

在用户界面中,列出了作业,我应该能够启动它们。但是当我这样做时:

batchAuditId = jobOperator.start(jobName, parameters);

突然,从w / i AbstractJob / execute抛出一条NPE @ 298行:

jobParametersValidator.validate(execution.getJobParameters());

因为jobParametersValidator为空-尽管它是使用类本身的默认值初始化的:

private JobParametersValidator jobParametersValidator = 
    new DefaultJobParametersValidator();

更重要的是,作业类构造函数的代码可以设置多个项目,包括验证程序的覆盖:

super(BATCH_NAME, BATCH_TYPE_CODE, BATCH_FUNCTION, BATCH_PROCESS_AREA);
setLogger(LoggerFactory.getLogger(CustomJob.class));
getLogger().debug("constructed: {}", this.toString());

setParametersRequired(Boolean.TRUE); // this job requires parameters
setRestartable(Boolean.TRUE);
setJobParametersValidator(new CustomJobParametersValidatorImpl());

在部署期间,当Spring创建所有类时,我可以单步执行代码,并为该作业创建并设置覆盖验证器。

但是,当jobOperator.start执行时,会抛出NPE。

我找不到原因。几乎就像jobOperator.start一样,它以某种方式创建了作业类的新实例,而不使用现有实例或我的自定义构造函数。

任何人都可以解释发生了什么事吗?

0 个答案:

没有答案