如何解决Spring 调度程序任务 - Cron Job 没有按计划在 Spring Batch 中工作,它只是继续运行?
我有使用任务调度程序的 Spring Batch 应用程序,目前设置为每 3 分钟运行一次。
截至目前,应用程序计划(cron 作业)已硬编码,如下所示
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:task="http://www.springframework.org/schema/task"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<bean id="transactionManager"
class="org.springframework.batch.support.transaction.ResourcelesstransactionManager" />
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor" ref="simpleAsyncTaskExecutor" />
</bean>
<bean id="simpleAsyncTaskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryfactorybean" />
<bean id="springSchedulingLauncher" class="com.javacodegeeks.example.scheduler.JobScheduler"></bean>
<!-- -->
<task:scheduler id="scheduler" />
<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="springSchedulingLauncher"
method="launch"
cron="0 0/3 * ? * *"
/>
</task:scheduled-tasks>
<!-- -->
</beans>
下面是java代码
package com.javacodegeeks.example.scheduler;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClasspathXmlApplicationContext;
import org.springframework.scheduling.annotation.Scheduled;
public class JobScheduler {
@Scheduled(cron = "0 0/3 * ? * *")
public void launch() throws Exception {
System.out.println("Starting Launch");
String[] str = {"meta-inf/spring/context-config.xml","meta-inf/spring/job-config.xml"};
ApplicationContext ctx = new ClasspathXmlApplicationContext(str);
Job job = (Job) ctx.getBean("myJob");
JobLauncher jobLauncher = (JobLauncher) ctx.getBean("jobLauncher");
try{
JobExecution execution = jobLauncher.run(job,new JobParameters());
System.out.println("Job Execution Status: "+ execution.getStatus());
}catch(Exception e){
e.printstacktrace();
}
System.out.println("Completed Launch");
}
}
下面给出了 App.java(主要方法)
package com.javacodegeeks.example.app;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClasspathXmlApplicationContext;
import org.springframework.scheduling.annotation.Scheduled;
import java.util.Date;
public class App {
public static void main(String[] args) {
System.out.println("Starting Main");
String[] str = {"meta-inf/spring/context-config.xml",new JobParameters());
System.out.println("Job Execution Status: "+ execution.getStatus());
}catch(Exception e){
e.printstacktrace();
}
System.out.println("Completed Main");
}
}
看起来它正在启动多个作业,但不知道为什么?我该如何解决这个问题?
解决方法
您的 XML 元素 <task:scheduler>
和 <task:scheduled-tasks>
没有用 <!-- -->
正确注释。你认为他们被评论了,但事实并非如此。因此,该任务被安排了两次:一次在 XML 配置中,一次在 launch
方法内的 Java 配置中。
以下是正确注释 XML 部分的方法:
<!--
<task:scheduler id="scheduler" />
<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="springSchedulingLauncher"
method="launch"
cron="0 0/3 * ? * *"
/>
</task:scheduled-tasks>
-->
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。