生活随笔
收集整理的這篇文章主要介紹了
SSM实现定时任务的两种方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
方式一:在spring-servlet.xml中配置任務約束,并開啟任務
| 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/> |
配置好之后,定義任務類:
| 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("-----------"); ?? ?} } |
?到此,第一種配置定時任務結束。
方式二:創建實現Job接口的實現類
| 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(); ?? ??? ?} ?? ?} } |
創建任務管理類,并在該類中執行指定的定時任務
| 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) { ?? ??? ??? ??? ?// 創建工作內容 ?? ??? ??? ??? ?JobDetail jobDetail = JobBuilder.newJob(TongjiTaskJob.class).withIdentity(taskId, groupName).build(); ?? ??? ??? ??? ?// 創建觸發器 ?? ??? ??? ??? ?trigger = TriggerBuilder.newTrigger().withIdentity(taskId, groupName) ?? ??? ??? ??? ??? ??? ?.withSchedule(CronScheduleBuilder.cronSchedule("0 0 2 1/1 * ? ")).build(); ?? ??? ??? ??? ?// 粘合工作和觸發器 ?? ??? ??? ??? ?scheduler.scheduleJob(jobDetail, trigger); ?? ??? ??? ??? ?// 啟動調度器 ?? ??? ??? ??? ?scheduler.start(); ?? ??? ??? ?} ?? ??? ?} catch (Exception e) { ?? ??? ??? ?logger.error("添加TongjiTask定時任務異常!" + e.getMessage()); ?? ??? ?} ?? ?} ?? ?// 定時執行的方法 ?? ?public void execute() { ? ? ? ?? ?? ??? ?this.AddTongjiTask(); ?? ?} } |
到此第二種定時任務配置結束,啟動項目即可執行定時任務。
注意:如果不想在第一種方式中執行定時任務:就把@Scheduled注解注釋掉,在第二種方式中不想指定定時任務,就把紅色字體的代碼注釋掉即可
總結
以上是生活随笔為你收集整理的SSM实现定时任务的两种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。