使用quartz配置定时任务,使得可以在前台进行定时任务操作。
1、在pom文件中加入依赖:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
2、编写定时任务配置类:
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、在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>