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/>

SSM实现定时任务的两种方式

配置好之后,定义任务类:

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注解注释掉,在第二种方式中不想指定定时任务,就把红色字体的代码注释掉即可