背景:我们有一些由spring batch管理的作业(作为启动应用程序)由cron job触发,我正在努力用quartz替换cron并添加spring batch admin来管理作业。
到目前为止,我能够通过spring batch管理控制台运行这些作业,当quartz试图启动作业执行时,问题就会发生。JobLauncher、JobLocator对象为空,这是autowired。请注意,我使用基于Java的配置,而不是XML。
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
@Component
@EnableBatchProcessing
public class GatewayReconciliationQuartzJob extends QuartzJobBean {
private static final String JOB_NAME = "GatewayReconciliationJob";
@Autowired
BatchJobLauncher batchJobLauncher;
@Autowired
private JobLocator jobLocator;
@Autowired
private JobLauncher jobLauncher;
@Override
protected void executeInternal(JobExecutionContext context) {
try {
if (null == jobLauncher) {
LOG.info("JobLauncher is null ");
}
if (null == jobLocator) {
LOG.info("jobLocator is null ");
}
LOG.info(String.format("Now really Starting Batch Job : %s", JOB_NAME));
JobParametersBuilder builder = new JobParametersBuilder();
builder.addDate("date", new Date());
this.jobLauncher.run(this.jobLocator.getJob(JOB_NAME), builder.toJobParameters());
} catch (JobExecutionAlreadyRunningException | JobInstanceAlreadyCompleteException | JobParametersInvalidException | NoSuchJobException | JobRestartException e) {
LOG.error("Error executing job", e);
throw new RuntimeException(e);
}
}
}
从这里开始:将以下行添加到executeinternal
方法的开头:
@Override
public void executeInternal(final JobExecutionContext context) throws JobExecutionException {
// Adding this autowires everything as needed
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
...
}
我正在寻找最好的解决方案,以创建一个java web应用程序,以生成Excel/PDF格式的报告。类似于Google Adwords的东西,用户可以创建日程报告,并在以后生成报告时下载。 我正在考虑开发一个java应用程序,在其中用户记录,选择一个预先定义的报告,并提供输入参数(如报告日期等),这个请求将被排队或保存为Quarts作业(首选持久队列)。一个作业将监视队列/作业并执行该作业,生成报告
有一个基于某些条件删除文件的任务。这个任务应该每天在某个时间运行。我们是否应该为这个任务使用spring boot和调度器。或者spring批处理+调度器会很好。也可以在spring批处理中使用分区并行处理此任务。 谢谢
我想了解Spring Batch是如何进行事务管理的。这不是一个技术问题,而是一个概念性的问题:Spring Batch使用什么方法?这种方法的后果是什么? 让我试着澄清一下这个问题。例如,在TaskletStep中,我看到步骤执行通常如下所示: 准备步骤元数据的几个JobRepository事务 每一块要处理的业务事务 更多JobRepository事务,用区块处理的结果更新步骤元数据 这似乎是
知道为什么下面的代码会出现以下错误吗? java.lang.NullPointerException:org.springframework.batch.item.database.HibernateCursoritemReader.DoRead处为null(HibernateCursoritemReader.java:155)