在一个项目中,我们必须运行一个定期开始的作业(现在QA env上每5分钟开始一次),该作业处理40K用户的一些任务。我们决定使用Spring Batch,因为它非常适合,并且几乎用默认配置实现了它(例如,它使用SynctaskExecutor
)。好的,有一个工作由一个步骤组成:
HibernatePagingItemReader
ItemProcessor
ItemWriter
,它通过多个JPQL和本机查询将数据保存到同一个PostgreSQL db。作业本身是用@enablescheduling
调度的,并且每5分钟由cron表达式触发一次:
@Scheduled(cron = "${job.assignment-rules}")
void processAssignments() {
try {
log.debug("Running assignment processing job");
jobLauncher.run(assignmentProcessingJob, populateJobParameters());
} catch (JobExecutionException e) {
log.error("Job processing has failed", e);
}
}
job:
assignment-rules: "0 0/5 * * * *"
select ex.job_instance_id, ex.create_time, ex.start_time, ex.end_time, ex.status, ex.exit_code, ex.exit_message
from batch_job_execution ex inner join batch_job_instance bji on ex.job_instance_id = bji.job_instance_id
order by start_time desc, job_instance_id desc;
job:
invitation-email: "0 0/10 * * * *"
assignment-rules: "0 0/5 * * * *"
rm-subordinates-count: "0 0/30 * * * *"
提前多谢
在您的用例中,使用默认的SynctaskExecutor
来启动作业是不安全的,因为所有作业都将由一个线程执行。如果其中一个作业运行时间超过5分钟,则下一个作业将堆积如山,并在某个时刻无法启动。
我将在您的用例中用异步TaskExecutor
实现(如org.springframework.scheduleing.concurrent.ThreadPoolTaskExecutor
)配置JobLauncher
。您可以在Configuring a JobLauncher一节中找到一个示例(请参见“图3.异步作业启动器序列”)。
除了配置为由Spring Batch的JobLauncher
使用的任务执行器之外,还需要确保Spring Boot使用了正确的任务执行器来调度任务(因为您使用的是@enableScheduling
)。有关更多细节,请参阅任务执行和调度部分。
我在版本2.1.4中开始学习Spring Boot Batch 这是我的配置 最后一节课是我的排定程序:
我正在尝试在后台运行作业,允许我根据某种条件或在超时发生后停止它。 我有这两块代码:
Spring批处理作业与flatfileitemreader(从csv读取)、processor(更新adwords api提要详细信息,对于csv文件中的每个记录(大约有40条记录),这一步大约需要40秒)和正在更新DB中记录的定制writer一起使用。 web.xml
我正在尝试自动登录到2008 R2服务器上的一组RDP客户端,当从桌面双击批处理文件时,下面的批处理工作正常,但是当将.bat文件设置为作为任务调度程序中的任务运行时,什么都没有发生 计划任务被设置为在管理员帐户下运行(只有一个可用),并且(开始于)可选字段也被设置为“C:\Users\Administrator\Desktop”。
我需要根据参数中提供的数字(n)执行特定的spring boot应用程序n次。我正在使用spring boot,并考虑使用spring调度程序来实现这一点。spring scheduler可以用来调度一个任务4-5次,然后停止吗? 我需要有一个单独的日志文件,为每个实例生成的输出文件。