Java利用quartz编写定时任务配置类

使用quartz配置定时任务,使得可以在前台进行定时任务操作。

1、在pom文件中加入依赖:
<dependency>
         <groupId>org.quartz-scheduler</groupId>
         <artifactId>quartz</artifactId>
         <version>2.2.3</version>
</dependency>

2、编写定时任务配置类:
package com.example.demo.scheduler.config;
import java.util.List;
import javax.annotation.PostConstruct;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.example.demo.scheduler.access.vo.SchedulerVO;
import com.example.demo.scheduler.service.SchedulerService;

/**
 * 定时任务配置类
 *
 */
@Component
public class SchedulerManager {

	private static final Logger log = LoggerFactory.getLogger(SchedulerManager.class);
	private Scheduler scheduler;
	@Autowired
	private SchedulerService schedulerService;
	
	public synchronized Scheduler getScheduler(){
		return this.scheduler;
	}
	
	/**
	 * 唤醒任务
	 * @param jobKey
	 */
	public synchronized void resumeJob(JobKey jobKey){
		try {
			this.scheduler.resumeJob(jobKey);
		} catch (Exception e) {
			log.error("唤醒任务异常,异常原因:" + e);
		}
	}
	
	/**
	 * 停止任务
	 * @param jobKey
	 */
	public synchronized void pauseJob(JobKey jobKey){
		try {
			this.scheduler.pauseJob(jobKey);
		} catch (Exception e) {
			log.error("停止任务异常,异常原因:" + e);
		}
	}
	
	/**
	 * 添加任务
	 * @param jobName
	 * @param group
	 * @param triggerName
	 * @param cronExpression
	 */
	public synchronized void addJob(String jobName, String group, String triggerName, String cronExpression, Class
   
    jobClass){
		try {
			JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, group).build();
			CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
			CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerName, group).withSchedule(scheduleBuilder).build();
			this.scheduler.scheduleJob(jobDetail, cronTrigger);
		} catch (Exception e) {
			log.error("添加任务异常,异常原因:" + e);
		}
	}
	
	/**
	 * 删除任务
	 * @param jobKey
	 */
	public synchronized void delJob(JobKey jobKey){
		try {
			this.scheduler.deleteJob(jobKey);
		} catch (Exception e) {
			log.error("删除任务异常,异常原因:" + e);
		}
	}
	
	/**
	 * 关闭任务
	 * @throws SchedulerException
	 */
	public synchronized void shutdown() throws SchedulerException{
		this.scheduler.shutdown(true);
	}
	
	/**
	 * 初始化任务
	 */
	@PostConstruct
	private void init(){
		try {
			StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
			this.scheduler = schedulerFactory.getScheduler();
			List
   
   
    
     list = schedulerService.getList(null);//从数据库中查询定时任务表中所有定时任务记录
			if (list != null && list.size() > 0) {
				for (SchedulerVO schedulerVO : list) {
					Class
    
     cls = (Class
    
    ) Class.forName(schedulerVO.getTaskClass());
					JobDetail jobDetail = JobBuilder.newJob(cls).withIdentity(schedulerVO.getTaskCode(), "DEFAULT").build();
					CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(schedulerVO.getCronExpression());
					CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("TRIGGER" + schedulerVO.getTaskCode(), "DEFAULT").withSchedule(scheduleBuilder).build();
					this.scheduler.scheduleJob(jobDetail, cronTrigger);
				}
			}
			this.scheduler.start();
		} catch (Exception e) {
			log.error("初始化系统任务异常,异常原因:" + e);
		}
	}
}

   
   


3、控制层代码:
@Autowired
    private SchedulerService schedulerService;
@RequestMapping("/")
    public String test111(Model model) throws Exception{
        List<SchedulerVO> list = schedulerService.getList(null);
        model.addAttribute("schedulerList", list);
        return "scheduler";
    }

4、html页面:
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta content="text/html;charset=UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <link th:href="@{bootstrap/css/bootstrap.min.css}" rel="stylesheet" />
        <link th:href="@{bootstrap/css/bootstrap-theme.min.css}" rel="stylesheet" />
    </head>
    <body>
        <div th:if="${not #lists.isEmpty(schedulerList)}">
            <div class="panel panel-primary">
                <div class="panel-heading">
                    <h3 class="panel-title">列表</h3>
                </div>
                <div class="panel-body">
                    <ul class="list-group">
                        <li class="list-group-item" th:each="scheduler:${schedulerList}">
                            <span th:text="${scheduler.taskName}"></span>
                            <span th:text="${scheduler.taskClass}"></span>
                            <button class="btn" th:οnclick="'getName(\'' + ${scheduler.taskName} + '\');'">获取名字</button>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
        <script th:src="@{jquery/dist/jquery.min.js}" type="text/javascript"></script>
        <script th:src="@{bootstrap/js/bootstrap.min.js}" type="text/javascript"></script>
    
    </body>
</html>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值