@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与数据库相连的更新操作相关推荐

  1. 用python操作mysql数据库(之“更新”操作)

    #!/usr/bin/env python # -*- coding: utf-8 -*-import MySQLdb#建立连接 conn = MySQLdb.connect(host='127.0. ...

  2. mongodb添加创建修改时间_MongoDB数据库插入、更新和删除操作详解

    一.Insert操作 Insert操作是MongoDB插入数据的基本方法,对目标集合使用Insert操作,会将该文档添加到MongoDB并自动生成相应的ID键.文档结构采用类似JSON的BSON格式. ...

  3. Oracle从零开始4——数据库更新操作

    数据库的主要操作分为两种: 查询操作:SELECT 更新操作:INSERT.DELETE.UPDATE 此时为保存原始的emp表的信息,在进行增加.修改.删除操作之前,先将此表复制一份 此语句执行之后 ...

  4. java查询到更新之前的数据_Java对数据库的查询和更新操作详解

    这篇文章主要介绍了使用Java对数据库进行基本的查询和更新操作,是Java入门学习中的基础知识,需要的朋友可以参考下 数据库查询 利用Connection对象的createStatement方法建立S ...

  5. JMeter对数据库的更新操作

    关于JMeter如何连接MySQL数据库,前面文章已经详解的讲解过了.因为配置数据库连是比较固定的步骤,这里就不重复讲解了. 本篇文章主要详细说明,使用JDBC Request组件,如何对数据库进行更 ...

  6. 使用Mybatis进行更新操作成功,数据库却没更新的原因

    先帖下代码: public void updateCustomerTest() throws IOException{//1.读取配置文件String resource="mybatis-c ...

  7. Oracle数据库中的级联查询、级联删除、级联更新操作教程

    这里整理了Oracle中的三种级联操作,其中Oracle定义外健的时候可以定义级联删除,但是没有级联修改的语法,当然可以用触发器实现,下面我们详细来看Oracle数据库中的级联查询.级联删除.级联更新 ...

  8. 解决spring JdbcTemplate更新操作成功但数据库未插入值的方案

    //开启新事务 DefaultTransactionDefinition transDefinition = new DefaultTransactionDefinition(); transDefi ...

  9. 到底是先更新数据库还是先更新缓存?

    很多小伙伴最近都在问我,在系统中引入缓存后,当向数据库中写入数据时,是先写数据库还是先写缓存呢?先写数据库和先写缓存有什么区别吗?今天,我们就一起来聊聊这个话题. 从本质上讲,无论是先写数据库还是先写 ...

最新文章

  1. MindCon | 杭京宁三大战场即将启动,火速来战!
  2. JOOMLA中文安装时 数据库发生错误解块办法
  3. 1.2.1 计算机硬件的基本组成
  4. 对Visual Studio 示例:Fitch and Mather 7.0的研究初步
  5. 2017c语言考核册答案,2017年电大《C语言程序设计》形成性考核册答案.doc
  6. 素数 c语言 时间少,C语言判断素数怎么优化时间,1000000以内,不用代码,指点一下就好...
  7. includes(), startsWith(), endsWith()
  8. 华为云郑叶来:优势挡不住趋势,技术创新是主旋律
  9. 读书笔记 UltraGrid(2)
  10. Centos 6.3中安装KVM
  11. arcgis 属性表中起点终点创建线_【ArcGIS开发】shapefile矢量数据遍历、求交、与属性更新...
  12. 内核线程、轻量级进程、用户线程三种线程概念解惑(线程≠轻量级进程)
  13. 计算机基础知识经典问答题,计算机基础知识问答题及答案一
  14. c语言大作业:员工工资管理系统
  15. 日语翻译中文-大家都再用的日语转换中文的转换器
  16. python爬虫轻松下载某易云音乐
  17. 何小鹏快跑:身家暴涨50亿美元,他还愿坐经济舱吗?
  18. Java———猴子偷桃(递归函数)
  19. CentOS7常见问题
  20. java 中的枚举_说说Java中的枚举(一)

热门文章

  1. Exception in thread “main“ java.lang.NoSuchMethodError: scala.reflect.ClassT
  2. C文件中的中文乱码 notepad2
  3. 同款蓝牙耳机为什么会串联_蓝牙耳机凭什么成网红明星标配时尚单品?揭秘三大原因...
  4. linux svn怎么提交代码,linux提交代码到svn服务器
  5. Win10 x64 中VC6 安装卡死、无法单步调试、调试退出进程没有结束
  6. 使用nero刻录光盘
  7. mac安装mysql后找不到_Mac安装MySQL步骤及遇到的问题
  8. 【二】CC2541 阿莫BLE开发板 与 BTool软件的连接 以及 读写UUID
  9. 将MySQL数据导出为sql文件
  10. lopatkin俄大神精简中文系统Windows 10 Pro 18362.145 19H1 Release x86-x64 ZH-CN DREY