生活随笔
收集整理的這篇文章主要介紹了
SSM实现定时任务的两种方式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
方式一:在spring-servlet.xml中配置任務(wù)約束,并開啟任務(wù)
| xmlns:task="http://www.springframework.org/schema/task" ? xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd " ? <task:annotation-driven/> |
配置好之后,定義任務(wù)類:
| import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class CzTongjiTask { ?? ?@Scheduled(cron = "0/5 * * * * ? ") ?? ?public void tongjiTask() { ?? ??? ?System.out.println("-----------"); ?? ?} } |
?到此,第一種配置定時(shí)任務(wù)結(jié)束。
方式二:創(chuàng)建實(shí)現(xiàn)Job接口的實(shí)現(xiàn)類
| import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.List; import java.util.Map; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.context.support.SpringBeanAutowiringSupport; import mapper.CommonMapper; public class TongjiTaskJob implements Job { ?? ?@Autowired ?? ?private CommonMapper commonMapper; ?? ?public TongjiTaskJob() { ?? ??? ?SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); ?? ?} ?? ?@Override ?? ?public void execute(JobExecutionContext context) throws JobExecutionException { ?? ??? ?try { ?? ??? ??? ?System.out.println(calendar.getTime()); ?? ??? ?} catch (Exception e) { ?? ??? ??? ?e.printStackTrace(); ?? ??? ?} ?? ?} } |
創(chuàng)建任務(wù)管理類,并在該類中執(zhí)行指定的定時(shí)任務(wù)
| import org.apache.log4j.Logger; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.TriggerBuilder; import org.quartz.TriggerKey; import org.quartz.impl.StdSchedulerFactory; import org.springframework.stereotype.Component; @Component public class TimerTaskScheduleManage { ?? ?private final Logger logger = Logger.getLogger(this.getClass()); ?? ?? ?private void AddTongjiTask() { ?? ??? ?String taskId = "TongjiTaskJob"; ?? ??? ?String groupName = taskId + "Group"; ?? ??? ?try { ?? ??? ??? ?Scheduler scheduler = factory.getScheduler(); ?? ??? ??? ?TriggerKey triggerKey = new TriggerKey(taskId, groupName); ?? ??? ??? ?CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); ?? ??? ??? ?if (trigger == null) { ?? ??? ??? ??? ?// 創(chuàng)建工作內(nèi)容 ?? ??? ??? ??? ?JobDetail jobDetail = JobBuilder.newJob(TongjiTaskJob.class).withIdentity(taskId, groupName).build(); ?? ??? ??? ??? ?// 創(chuàng)建觸發(fā)器 ?? ??? ??? ??? ?trigger = TriggerBuilder.newTrigger().withIdentity(taskId, groupName) ?? ??? ??? ??? ??? ??? ?.withSchedule(CronScheduleBuilder.cronSchedule("0 0 2 1/1 * ? ")).build(); ?? ??? ??? ??? ?// 粘合工作和觸發(fā)器 ?? ??? ??? ??? ?scheduler.scheduleJob(jobDetail, trigger); ?? ??? ??? ??? ?// 啟動(dòng)調(diào)度器 ?? ??? ??? ??? ?scheduler.start(); ?? ??? ??? ?} ?? ??? ?} catch (Exception e) { ?? ??? ??? ?logger.error("添加TongjiTask定時(shí)任務(wù)異常!" + e.getMessage()); ?? ??? ?} ?? ?} ?? ?// 定時(shí)執(zhí)行的方法 ?? ?public void execute() { ? ? ? ?? ?? ??? ?this.AddTongjiTask(); ?? ?} } |
到此第二種定時(shí)任務(wù)配置結(jié)束,啟動(dòng)項(xiàng)目即可執(zhí)行定時(shí)任務(wù)。
注意:如果不想在第一種方式中執(zhí)行定時(shí)任務(wù):就把@Scheduled注解注釋掉,在第二種方式中不想指定定時(shí)任務(wù),就把紅色字體的代碼注釋掉即可
總結(jié)
以上是生活随笔為你收集整理的SSM实现定时任务的两种方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。