在ssm框架中,利用quartz设置定时任务。
1- maven管理项目导入quartz依赖。
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
2- 定义job执行类,继承Job
import java.text.SimpleDateFormat;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class FirstJob implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("job-->"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
}
}
3- 写一个管理类,用来管理启动定时任务
import java.util.List;
import org.apache.log4j.Logger;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.lj.vjg.model.Job;
import com.lj.vjg.service.JobService;
public class JobManager {
private Logger log = Logger.getLogger(JobManager.class);
/**
* SchedulerFactory使用获取Scheduler
*
* @return
* @throws Exception
*/
private static Scheduler getScheduler() throws Exception {
SchedulerFactory scheduler = new StdSchedulerFactory();
return scheduler.getScheduler();
}
@Autowired
private JobService jobService;
public void addJob() throws Exception {
// 1- 根据条件从数据库获取定时任务详情
Job job = new Job();
job.setStatus(0);
List<Job> jobList = jobService.selectJob(job);
if (jobList == null || jobList.isEmpty()) {
return;
}
// 2- 获取Scheduler
Scheduler scheduler = getScheduler();
// 3- 循环添加数据库中的任务
for (Job j : jobList) {
int i = 1;
// 通过反射获取任务详情实体类
Class clazz = Class.forName(j.getJob_class());
// 4- 新建JobDetail
JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(j.getJob_name(), "jobGroup" + i).build();
// 5- 新建触发器
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger" + i, "triggerGroup" + i)
.withSchedule(CronScheduleBuilder.cronSchedule(j.getJob_time())).startNow().build();
// 6- 将任务类 和触发器添加到任务Scheduler
scheduler.scheduleJob(jobDetail, trigger);
// 7- 启动Scheduler
scheduler.start();
log.info("添加定时任务[jobName] - "+j.getJob_name()+" [jobClass] - "+j.getJob_class());
i++;
}
}
}
4- 在mvc.xml文件中定义bean,利用init-param使spring自动加载启动定时任务
<!-- 定时任务:要求所有的定时任务在spring启动之后跟着启动 -->
<bean init-method="addJob" class="com.lj.vjg.jobs.JobManager" ></bean>
5- 完成,启动测试。
附1:数据库存储的数据
附2:quartz时间配置
秒(0-59) 分(0-59) 时(0-23) 天(1-31) 月(1-12) 年(1970-2099或不填)
通配符含义: * :任意
? :无限制
/ :递增触发
常用示例:
0 0 12 * * ? 每天12点触发
0 15 10 ? * * 每天10点15分触发
0 15 10 * * ? 每天10点15分触发
详细可查看(百度来的别人博客):点击打开链接