Commit c838611b authored by 黎博's avatar 黎博

新增监控模块

parent e529948d
...@@ -167,6 +167,11 @@ ...@@ -167,6 +167,11 @@
<artifactId>spring-boot-starter-validation</artifactId> <artifactId>spring-boot-starter-validation</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package cn.qg.holmes.config;
import cn.qg.holmes.entity.monitor.MonitorTask;
import cn.qg.holmes.service.monitor.MonitorTaskService;
import cn.qg.holmes.utils.QuartzUtils;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Scheduler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 项目启动时,初始化定时任务表里的任务
*/
@Slf4j
@Component
@Order(value = 5)
public class QuartzInitRunner implements ApplicationRunner {
@Autowired
MonitorTaskService monitorTaskService;
@Autowired
private Scheduler scheduler;
@Override
public void run(ApplicationArguments args) {
List<MonitorTask> monitorTaskList = monitorTaskService.list();
for (MonitorTask monitorTask: monitorTaskList) {
if (monitorTask.getInitStart() == 1) {
QuartzUtils.createScheduleJob(scheduler, monitorTask);
}
}
}
}
package cn.qg.holmes.controller.monitor;
import cn.qg.holmes.common.JsonResult;
import cn.qg.holmes.entity.monitor.MonitorDataSource;
import cn.qg.holmes.service.monitor.MonitorDataSourceService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
* 监控数据源相关接口
*/
@CrossOrigin
@RestController
@RequestMapping("/monitor/ds")
public class MonitorDataSourceController {
@Autowired
MonitorDataSourceService monitorDataSourceService;
/**
* 获取监控数据源列表,带分页和筛选
* @param pageNum
* @param pageSize
* @param dsName
* @return
*/
@GetMapping("/listWithPaging")
public JsonResult getMonitorDataSourceListWithPaging(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
String dsName) {
IPage<MonitorDataSource> IPageParam = new Page<>(pageNum, pageSize);
QueryWrapper<MonitorDataSource> queryWrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(dsName)) {
queryWrapper.eq("name", dsName);
}
IPage<MonitorDataSource> IPageResult = monitorDataSourceService.page(IPageParam);
Map<String, Object> dsResult = new HashMap<>();
dsResult.put("total", IPageResult.getTotal());
dsResult.put("list", IPageResult.getRecords());
return JsonResult.buildSuccessResult(dsResult);
}
/**
* 获取监控数据源接口,不带分页和筛选
* @return
*/
@GetMapping("/list")
public JsonResult getMonitorDataSourceList() {
return JsonResult.buildSuccessResult(monitorDataSourceService.list());
}
/**
* 添加监控数据源
* @param monitorDataSource
* @return
*/
@PostMapping("/add")
public JsonResult addMonitorDataSource(@RequestBody MonitorDataSource monitorDataSource) {
return JsonResult.buildSuccessResult(monitorDataSourceService.saveOrUpdate(monitorDataSource));
}
/**
* 更新监控数据源
* @param monitorDataSource
* @return
*/
@PostMapping("/update")
public JsonResult updateMonitorDataSource(@RequestBody MonitorDataSource monitorDataSource) {
Integer dsId = monitorDataSource.getId();
if (dsId == null) {
return JsonResult.buildErrorStateResult("数据源不存在!", null);
}
if (monitorDataSourceService.getById(dsId) == null) {
return JsonResult.buildErrorStateResult("数据源不存在", null);
}
return JsonResult.buildSuccessResult(monitorDataSourceService.saveOrUpdate(monitorDataSource));
}
/**
* 删除监控数据源
* @param monitorDataSource
* @return
*/
@PostMapping("/delete")
public JsonResult deleteMonitorDataSource(@RequestBody MonitorDataSource monitorDataSource) {
Integer dsId = monitorDataSource.getId();
if (dsId == null) {
return JsonResult.buildErrorStateResult("数据源不存在!", null);
}
if (monitorDataSourceService.getById(dsId) == null) {
return JsonResult.buildErrorStateResult("数据源不存在", null);
}
return JsonResult.buildSuccessResult(monitorDataSourceService.getById(dsId));
}
}
package cn.qg.holmes.controller.monitor;
import cn.qg.holmes.common.JsonResult;
import cn.qg.holmes.entity.monitor.MonitorDataSource;
import cn.qg.holmes.entity.monitor.MonitorTask;
import cn.qg.holmes.service.monitor.MonitorDataSourceService;
import cn.qg.holmes.service.monitor.MonitorTaskService;
import cn.qg.holmes.utils.DingdingUtils;
import cn.qg.holmes.utils.JdbcUtils;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 定时任务Controller
*/
@CrossOrigin
@RestController
@RequestMapping("/monitor/task")
public class MonitorTaskController {
@Autowired
MonitorTaskService monitorTaskService;
@Autowired
MonitorDataSourceService monitorDataSourceService;
@Autowired
JdbcTemplate jdbcTemplate;
@GetMapping("/list")
public JsonResult getMonitorTaskList(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
String businessLine,
String serviceName,
String owner) {
IPage<MonitorTask> pageParam = new Page<>(pageNum, pageSize);
QueryWrapper<MonitorTask> queryWrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(businessLine)) {
queryWrapper.eq("business_line", businessLine);
}
if (!StringUtils.isEmpty(serviceName)) {
queryWrapper.eq("service_name", serviceName);
}
if (!StringUtils.isEmpty("owner")) {
queryWrapper.eq("owner", owner);
}
IPage<MonitorTask> monitorTaskIPage = monitorTaskService.page(pageParam, queryWrapper);
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("list", monitorTaskIPage.getRecords());
resultMap.put("total", monitorTaskIPage.getTotal());
return JsonResult.buildSuccessResult(resultMap);
}
/**
* 新增监控
*
* @param monitorTask
* @return
*/
@PostMapping("/add")
public JsonResult addMonitorTask(@RequestBody MonitorTask monitorTask) {
return JsonResult.buildSuccessResult(monitorTaskService.save(monitorTask));
}
/**
* 修改监控
*
* @param monitorTask
* @return
*/
@PostMapping("/edit")
public JsonResult editMonitorTask(@RequestBody MonitorTask monitorTask) {
return JsonResult.buildSuccessResult(monitorTaskService.saveOrUpdate(monitorTask));
}
/**
* 删除监控
*
* @param monitorTask
* @return
*/
@PostMapping("/delete")
public JsonResult deleteMonitorTask(@RequestBody MonitorTask monitorTask) {
Integer taskId = monitorTask.getId();
if (monitorTaskService.getById(taskId) == null) {
return JsonResult.buildErrorStateResult("定时任务不存在!", false);
}
boolean delResult = monitorTaskService.removeById(taskId);
if (delResult) {
return JsonResult.buildSuccessResult("删除成功!");
} else {
return JsonResult.buildErrorStateResult("删除失败!", false);
}
}
/**
* 立即执行SQL
*
* @param dsId 数据源id
* @param sql SQL
* @return
*/
@PostMapping("/execute")
public JsonResult executeSql(@RequestParam Integer dsId, @RequestParam String sql) {
MonitorDataSource monitorDataSource = monitorDataSourceService.getById(dsId);
List<Map<String, Object>> resultList = JdbcUtils.queryForList(monitorDataSource.getHost(), monitorDataSource.getPort(), monitorDataSource.getUsername(),
monitorDataSource.getPassword(), null, sql);
return JsonResult.buildSuccessResult(resultList);
}
/**
* 发送测试,立即测试下定时任务发送消息是否准确
*
* @param monitorTask 监控任务
* @return
*/
@PostMapping("/test")
public JsonResult testMonitorTask(@RequestBody MonitorTask monitorTask) {
try {
Integer dsId = monitorTask.getDsId();
MonitorDataSource monitorDataSource = monitorDataSourceService.getById(dsId);
List<Map<String, Object>> resultList = JdbcUtils.queryForList(monitorDataSource.getHost(), monitorDataSource.getPort(),
monitorDataSource.getUsername(), monitorDataSource.getPassword(), null, monitorTask.getSql());
String dingUrl = monitorTask.getDingUrl();
String dingText = monitorTask.getDingText();
dingText = dingText.replaceAll("\\{count}", String.valueOf(resultList.size()));
String markdownMsg = DingdingUtils.buildMarkdownMsg("监控测试", dingText + "\n" + JSON.toJSONString(resultList), false);
boolean result = DingdingUtils.sendToDingding(markdownMsg, dingUrl);
return JsonResult.buildSuccessResult(result ? "发送成功!" : "发送失败!", true);
} catch (Exception e) {
e.printStackTrace();
return JsonResult.buildErrorStateResult("发送异常!", false);
}
}
}
package cn.qg.holmes.entity.monitor;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 监控数据源表
* @author libo
*/
@Data
@TableName(value = "monitor_data_source")
public class MonitorDataSource {
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 数据源名称
*/
@TableField(value = "`name`")
private String name;
/**
* 数据源host
*/
@TableField(value = "`host`")
private String host;
/**
* 数据源端口
*/
@TableField(value = "`port`")
private String port;
/**
* 数据源用户名
*/
@TableField(value = "`username`")
private String username;
/**
* 数据源密码
*/
@TableField(value = "`password`")
private String password;
/**
* 创建时间
*/
@TableField(value = "`create_time`")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 更新时间
*/
@TableField(value = "`update_time`")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
package cn.qg.holmes.entity.monitor;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* 监控定时任务配置实体类
* @author libo
*/
@Data
@TableName(value = "monitor_task")
public class MonitorTask {
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 定时任务执行类
*/
@TableField(value = "task_class")
@NotBlank(message = "定时任务执行类不能为空")
private String taskClass;
/**
* 定时任务描述
*/
@TableField(value = "task_name")
@NotBlank(message = "定时任务名称不能为空")
private String taskName;
/**
* 定时任务cron表达式
*/
@TableField(value = "task_cron")
private String taskCron;
@TableField(value = "`sql`")
private String sql;
@TableField(value = "`ds_id`")
@NotNull(message = "数据源id不能为空")
private Integer dsId;
@TableField(value = "`ding_url`")
private String dingUrl;
@TableField(value = "`ding_text`")
private String dingText;
/**
* 是否项目初始化时启动,0-不启动,1-启动
*/
@TableField(value = "init_start")
private Integer initStart;
/**
* 业务线
*/
@TableField(value = "`business_line`")
private String businessLine;
/**
* 服务名
*/
@TableField(value = "`service_name`")
private String serviceName;
/**
* 所有人
*/
@TableField(value = "`owner`")
private String owner;
/**
* 创建时间
*/
@TableField(value = "`create_time`")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 更新时间
*/
@TableField(value = "`update_time`")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
package cn.qg.holmes.mapper.monitor;
import cn.qg.holmes.entity.monitor.MonitorDataSource;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface MonitorDataSourceMapper extends BaseMapper<MonitorDataSource> {
}
package cn.qg.holmes.mapper.monitor;
import cn.qg.holmes.entity.monitor.MonitorTask;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface MonitorTaskMapper extends BaseMapper<MonitorTask> {
}
package cn.qg.holmes.quartz;
import cn.qg.holmes.entity.monitor.MonitorDataSource;
import cn.qg.holmes.entity.monitor.MonitorTask;
import cn.qg.holmes.service.monitor.MonitorDataSourceService;
import cn.qg.holmes.service.monitor.MonitorTaskService;
import cn.qg.holmes.utils.DingdingUtils;
import cn.qg.holmes.utils.JdbcUtils;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
public class DbQueryTask extends QuartzJobBean {
@Autowired
MonitorDataSourceService monitorDataSourceService;
@Autowired
MonitorTaskService monitorTaskService;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDetail jobDetail = jobExecutionContext.getJobDetail();
// 定时任务名称
String taskName = jobDetail.getKey().getName();
// 获取定时任务信息
QueryWrapper<MonitorTask> monitorTaskQueryWrapper = new QueryWrapper<>();
monitorTaskQueryWrapper.eq("task_name", taskName);
MonitorTask monitorTask = monitorTaskService.getOne(monitorTaskQueryWrapper);
// 获取数据源相关信息
Integer dsId = monitorTask.getDsId();
MonitorDataSource monitorDataSource = monitorDataSourceService.getById(dsId);
List<Map<String, Object>> resultList = JdbcUtils.queryForList(monitorDataSource.getHost(), monitorDataSource.getPort(),
monitorDataSource.getUsername(), monitorDataSource.getPassword(), null, monitorTask.getSql());
String dingUrl = monitorTask.getDingUrl();
String dingText = monitorTask.getDingText();
// dingText = dingText.replaceAll("\\{count}", String.valueOf(resultList.size()));
dingText = replaceDingText(dingText, resultList);
String markdownMsg = DingdingUtils.buildMarkdownMsg("监控测试", dingText + "\n" + JSON.toJSONString(resultList), false);
DingdingUtils.sendToDingding(markdownMsg, dingUrl);
}
public static String replaceDingText(String dingText, List<Map<String, Object>> queryList) {
if (dingText.contains("{count}")) {
dingText = dingText.replace("{count}", String.valueOf(queryList.size()));
}
Pattern numPattern = Pattern.compile("\\{\\d}");
Matcher matcher = numPattern.matcher(dingText);
List<String> firstLineDataList = null;
if (queryList.size() > 0) {
firstLineDataList = new ArrayList(queryList.get(0).values());
}
int count = matcher.groupCount();
for (int i=0; i < count; i++) {
dingText.replace(matcher.group(i+1), firstLineDataList.get(i));
}
return dingText;
}
public static void main(String[] args) {
String dingText = "监控定时任务测试,本次共查出{count}条数据,第一行第一列数据是{0}";
List<Map<String, Object>> mapList = new ArrayList<>();
Map<String, Object> map1 = new LinkedHashMap<>();
Map<String, Object> map2 = new LinkedHashMap<>();
map1.put("sku_no", "123");
map1.put("sku_name", "商品一");
map2.put("sku_no", "456");
map2.put("sku_name", "商品二");
mapList.add(map1);
mapList.add(map2);
dingText = replaceDingText(dingText, mapList);
System.out.println(dingText);
}
}
package cn.qg.holmes.service.monitor;
import cn.qg.holmes.entity.monitor.MonitorDataSource;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* 监控数据源Service
*/
public interface MonitorDataSourceService extends IService<MonitorDataSource> {
}
package cn.qg.holmes.service.monitor;
/**
* 监控Service
*/
public interface MonitorService {
}
package cn.qg.holmes.service.monitor;
import cn.qg.holmes.entity.monitor.MonitorTask;
import com.baomidou.mybatisplus.extension.service.IService;
public interface MonitorTaskService extends IService<MonitorTask> {
}
package cn.qg.holmes.service.monitor.impl;
import cn.qg.holmes.entity.monitor.MonitorDataSource;
import cn.qg.holmes.mapper.monitor.MonitorDataSourceMapper;
import cn.qg.holmes.service.monitor.MonitorDataSourceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class MonitorDataSourceServiceImpl extends ServiceImpl<MonitorDataSourceMapper, MonitorDataSource>
implements MonitorDataSourceService {
}
package cn.qg.holmes.service.monitor.impl;
import cn.qg.holmes.service.monitor.MonitorService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class MonitorServiceImpl implements MonitorService {
}
package cn.qg.holmes.service.monitor.impl;
import cn.qg.holmes.entity.monitor.MonitorTask;
import cn.qg.holmes.mapper.monitor.MonitorTaskMapper;
import cn.qg.holmes.service.monitor.MonitorTaskService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class MonitorTaskServiceImpl extends ServiceImpl<MonitorTaskMapper, MonitorTask> implements MonitorTaskService {
}
package cn.qg.holmes.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.*;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* jdbc操作工具类
* @author libo
* 2021-12-06
*/
public class JdbcUtils {
@Autowired
JdbcTemplate jdbcTemplate;
public static List<Map<String, Object>> queryForList(String host, String port, String username, String password, String db, String sql) {
String driver = "com.mysql.jdbc.Driver";
String url;
if (db == null) {
url = "jdbc:mysql://" + host + ":" + port;
} else {
url = "jdbc:mysql://" + host + ":" + port + "/" + db;
}
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
Class.forName(driver);
connection = DriverManager.getConnection(url, username, password);
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
List<Map<String, Object>> resultList = convertResultSetToList(resultSet);
return resultList;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (resultSet != null) {
resultSet = null;
}
if (statement != null) {
statement = null;
}
if (connection != null) {
connection = null;
}
}
}
}
/**
* ResultSet转列表
* @param resultSet
* @return
*/
public static List<Map<String, Object>> convertResultSetToList(ResultSet resultSet) {
if (null == resultSet) {
return null;
}
List<Map<String, Object>> dataList = new ArrayList<>();
try {
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
while (resultSet.next()) {
Map<String, Object> rowData = new LinkedHashMap<>();
for (int i = 0, columnCount = resultSetMetaData.getColumnCount(); i < columnCount; i++) {
rowData.put(resultSetMetaData.getColumnName(i + 1), resultSet.getObject(i + 1));
}
dataList.add(rowData);
}
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return dataList;
}
}
package cn.qg.holmes.utils;
import cn.qg.holmes.entity.monitor.MonitorTask;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
@Slf4j
public class QuartzUtils {
public static void createScheduleJob(Scheduler scheduler, MonitorTask monitorTask) {
try {
Class<? extends Job> jobClass = (Class<? extends Job>) Class.forName("cn.qg.holmes.quartz." + monitorTask.getTaskClass());
JobDetail jobDetail = JobBuilder
.newJob(jobClass)
.withIdentity(monitorTask.getTaskName())
.build();
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(monitorTask.getTaskCron());
CronTrigger cronTrigger = TriggerBuilder
.newTrigger()
.withIdentity(monitorTask.getTaskName())
.withSchedule(scheduleBuilder)
.build();
scheduler.scheduleJob(jobDetail, cronTrigger);
} catch (ClassNotFoundException e) {
log.info("定时任务类路径出错:请输入类的绝对路径");
} catch (SchedulerException e) {
log.info("创建定时任务出错:" + e.getMessage());
}
log.info("创建定时任务: {}", monitorTask.getTaskName());
}
/**
* 根据任务名称暂停定时任务
* @param scheduler 调度器
* @param jobName 定时任务名称
* @throws SchedulerException
*/
public static void pauseScheduleJob(Scheduler scheduler, String jobName) {
JobKey jobKey = JobKey.jobKey(jobName);
try {
scheduler.pauseJob(jobKey);
} catch (SchedulerException e) {
log.info("暂停定时任务出错:" + e.getMessage());
}
}
/**
* 根据任务名称恢复定时任务
* @param scheduler 调度器
* @param jobName 定时任务名称
* @throws SchedulerException
*/
public static void resumeScheduleJob(Scheduler scheduler, String jobName) {
JobKey jobKey = JobKey.jobKey(jobName);
try {
scheduler.resumeJob(jobKey);
} catch (SchedulerException e) {
log.info("启动定时任务出错:" + e.getMessage());
}
}
/**
* 根据任务名称立即运行一次定时任务
* @param scheduler 调度器
* @param jobName 定时任务名称
* @throws SchedulerException
*/
public static void runOnce(Scheduler scheduler, String jobName) {
JobKey jobKey = JobKey.jobKey(jobName);
try {
scheduler.triggerJob(jobKey);
} catch (SchedulerException e) {
log.info("运行定时任务出错:" + e.getMessage());
}
}
/**
* 更新定时任务
*
* @param scheduler 调度器
* @param monitorTask 定时任务信息类
* @throws SchedulerException
*/
public static void updateScheduleJob(Scheduler scheduler, MonitorTask monitorTask) {
try {
//获取到对应任务的触发器
TriggerKey triggerKey = TriggerKey.triggerKey(monitorTask.getTaskName());
//设置定时任务执行方式
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(monitorTask.getTaskCron());
//重新构建任务的触发器trigger
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
trigger = trigger
.getTriggerBuilder()
.withIdentity(triggerKey)
.withSchedule(scheduleBuilder)
.build();
//重置对应的job
scheduler.rescheduleJob(triggerKey, trigger);
} catch (SchedulerException e) {
System.out.println("更新定时任务出错:" + e.getMessage());
}
}
/**
* 根据定时任务名称从调度器当中删除定时任务
*
* @param scheduler 调度器
* @param jobName 定时任务名称
* @throws SchedulerException
*/
public static void deleteScheduleJob(Scheduler scheduler, String jobName) {
JobKey jobKey = JobKey.jobKey(jobName);
try {
scheduler.deleteJob(jobKey);
} catch (SchedulerException e) {
log.info("删除定时任务出错:" + e.getMessage());
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment