quartz与数据库相连的更新操作
@Override@Scheduled(cron = "*/30 * * * * ?") //每隔30秒执行一次更新quartz中的任务,调小一点好测试public void refreshTrigger() {try {
// log.info("ScheduleTriggerService.refreshTrigger");System.out.println("ScheduleTriggerService.refreshTrigger:每30秒刷新一次");//查询出数据库中所有的定时任务List<ScheduleTrigger> jobList = scheduleTriggerMapper.queryAll();if (jobList != null) {for (ScheduleTrigger scheduleJob : jobList) {String status = scheduleJob.getStatus(); //该任务触发器目前的状态//TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);//说明本条任务还没有添加到quartz中if (null == trigger) {if (status.equals("0")) { //如果是禁用,则不用创建触发器continue;}System.out.println("有新的任务需要更新。。。");JobDetail jobDetail = null;try {//创建JobDetail(数据库中job_name存的任务全路径,这里就可以动态的把任务注入到JobDetail中)jobDetail = JobBuilder.newJob((Class<? extends Job>) Class.forName(scheduleJob.getJobName())).withIdentity(scheduleJob.getJobName(), scheduleJob.getJobGroup()).build();//TODO 可以添加一些额外的参数到任务的上下文中Integer scheduleTriggerId = scheduleJob.getId();List<ScheduleTriggerParam> paramList = scheduleTriggerParamMapper.listByScheduleTriggerId(scheduleTriggerId);JobDataMap jobDataMap = jobDetail.getJobDataMap();for (ScheduleTriggerParam p : paramList) {jobDataMap.put(p.getName(), p.getValue());}//表达式调度构建器CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCron());//按新的cronExpression表达式构建一个新的triggertrigger = TriggerBuilder.newTrigger().withIdentity(scheduleJob.getJobName(), scheduleJob.getJobGroup()).withSchedule(scheduleBuilder).build();//把trigger和jobDetail注入到调度器scheduler.scheduleJob(jobDetail, trigger);} catch (ClassNotFoundException e) {e.printStackTrace();}} else { //说明查出来的这条任务,已经设置到quartz中了// Trigger已存在,先判断是否需要删除,如果不需要,再判定是否时间有变化if (status.equals("0")) { //如果是禁用,从quartz中删除这条任务System.out.println("有老的任务被禁用了,删除中。。。");JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());scheduler.deleteJob(jobKey);continue;}System.out.println("有老的任务表达式更新了,更新中。。。");String searchCron = scheduleJob.getCron(); //获取数据库的String currentCron = trigger.getCronExpression();if (!searchCron.equals(currentCron)) { //说明该任务有变化,需要更新quartz中的对应的记录//表达式调度构建器CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(searchCron);//按新的cronExpression表达式重新构建triggertrigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();//按新的trigger重新设置job执行scheduler.rescheduleJob(triggerKey, trigger);}}}}} catch (Exception e) {
// log.error("定时任务每日刷新触发器任务异常,在ScheduleTriggerServ
// iceImpl的方法refreshTrigger中,异常信息:", e);System.out.println("定时任务每日刷新触发器任务异常,在ScheduleTriggerServiceImpl的方法refreshTrigger中,异常信息:"+e);throw new RuntimeException(e);}}@Overridepublic void add(ScheduleTrigger scheduleTrigger) {//保存任务scheduleTriggerMapper.insert(scheduleTrigger);//保存任务相关的参数for (ScheduleTriggerParam p : scheduleTrigger.getParamList()) {p.setScheduleTriggerId(scheduleTrigger.getId());scheduleTriggerParamMapper.insert(p);}}
quartz与数据库相连的更新操作相关推荐
- 用python操作mysql数据库(之“更新”操作)
#!/usr/bin/env python # -*- coding: utf-8 -*-import MySQLdb#建立连接 conn = MySQLdb.connect(host='127.0. ...
- mongodb添加创建修改时间_MongoDB数据库插入、更新和删除操作详解
一.Insert操作 Insert操作是MongoDB插入数据的基本方法,对目标集合使用Insert操作,会将该文档添加到MongoDB并自动生成相应的ID键.文档结构采用类似JSON的BSON格式. ...
- Oracle从零开始4——数据库更新操作
数据库的主要操作分为两种: 查询操作:SELECT 更新操作:INSERT.DELETE.UPDATE 此时为保存原始的emp表的信息,在进行增加.修改.删除操作之前,先将此表复制一份 此语句执行之后 ...
- java查询到更新之前的数据_Java对数据库的查询和更新操作详解
这篇文章主要介绍了使用Java对数据库进行基本的查询和更新操作,是Java入门学习中的基础知识,需要的朋友可以参考下 数据库查询 利用Connection对象的createStatement方法建立S ...
- JMeter对数据库的更新操作
关于JMeter如何连接MySQL数据库,前面文章已经详解的讲解过了.因为配置数据库连是比较固定的步骤,这里就不重复讲解了. 本篇文章主要详细说明,使用JDBC Request组件,如何对数据库进行更 ...
- 使用Mybatis进行更新操作成功,数据库却没更新的原因
先帖下代码: public void updateCustomerTest() throws IOException{//1.读取配置文件String resource="mybatis-c ...
- Oracle数据库中的级联查询、级联删除、级联更新操作教程
这里整理了Oracle中的三种级联操作,其中Oracle定义外健的时候可以定义级联删除,但是没有级联修改的语法,当然可以用触发器实现,下面我们详细来看Oracle数据库中的级联查询.级联删除.级联更新 ...
- 解决spring JdbcTemplate更新操作成功但数据库未插入值的方案
//开启新事务 DefaultTransactionDefinition transDefinition = new DefaultTransactionDefinition(); transDefi ...
- 到底是先更新数据库还是先更新缓存?
很多小伙伴最近都在问我,在系统中引入缓存后,当向数据库中写入数据时,是先写数据库还是先写缓存呢?先写数据库和先写缓存有什么区别吗?今天,我们就一起来聊聊这个话题. 从本质上讲,无论是先写数据库还是先写 ...
最新文章
- MindCon | 杭京宁三大战场即将启动,火速来战!
- JOOMLA中文安装时 数据库发生错误解块办法
- 1.2.1 计算机硬件的基本组成
- 对Visual Studio 示例:Fitch and Mather 7.0的研究初步
- 2017c语言考核册答案,2017年电大《C语言程序设计》形成性考核册答案.doc
- 素数 c语言 时间少,C语言判断素数怎么优化时间,1000000以内,不用代码,指点一下就好...
- includes(), startsWith(), endsWith()
- 华为云郑叶来:优势挡不住趋势,技术创新是主旋律
- 读书笔记 UltraGrid(2)
- Centos 6.3中安装KVM
- arcgis 属性表中起点终点创建线_【ArcGIS开发】shapefile矢量数据遍历、求交、与属性更新...
- 内核线程、轻量级进程、用户线程三种线程概念解惑(线程≠轻量级进程)
- 计算机基础知识经典问答题,计算机基础知识问答题及答案一
- c语言大作业:员工工资管理系统
- 日语翻译中文-大家都再用的日语转换中文的转换器
- python爬虫轻松下载某易云音乐
- 何小鹏快跑:身家暴涨50亿美元,他还愿坐经济舱吗?
- Java———猴子偷桃(递归函数)
- CentOS7常见问题
- java 中的枚举_说说Java中的枚举(一)
热门文章
- Exception in thread “main“ java.lang.NoSuchMethodError: scala.reflect.ClassT
- C文件中的中文乱码 notepad2
- 同款蓝牙耳机为什么会串联_蓝牙耳机凭什么成网红明星标配时尚单品?揭秘三大原因...
- linux svn怎么提交代码,linux提交代码到svn服务器
- Win10 x64 中VC6 安装卡死、无法单步调试、调试退出进程没有结束
- 使用nero刻录光盘
- mac安装mysql后找不到_Mac安装MySQL步骤及遇到的问题
- 【二】CC2541 阿莫BLE开发板 与 BTool软件的连接 以及 读写UUID
- 将MySQL数据导出为sql文件
- lopatkin俄大神精简中文系统Windows 10 Pro 18362.145 19H1 Release x86-x64 ZH-CN DREY