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

本文介绍在Spring框架下两种配置定时任务的方法。一种是通过@Scheduled注解实现,另一种是使用Quartz Job接口创建任务。文章详细展示了如何在spring-servlet.xml中配置任务约束并开启任务,以及如何创建实现Job接口的类和任务管理类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iamlzjoco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值