定时操作,公司里叫定时任务调度,我用Quartz(一)
来源:互联网 发布:淘宝卖家登录中心 编辑:程序博客网 时间:2024/05/01 23:28
由于刚开始写博客,很多使用技巧都不熟悉,所以欢迎大家多多指正,我将会不断的完善写过的文章,包括代码的优化和图片的重新选择。最近在公司被让做一个,定时自动检测多台远程服务器数据库的功能,今天我把我找到的解决方式记录在这里,由于一次无法写完,我先把定时任务实现的操作记录在这里。
QuartzManager.addJobManager("邮件检查定时器", QuartzCheckDatabaseMail.class, "0 44 15 * * ? *");
这个定时任务的核心代码其实就这一句,关键是QuartzManager这个类的由来。我使用了Quartz开源框架。第一要点:一定要导入 **quartz-all-1.6.0.jar** 这个jar包
package com.msun.scheduleServer.timerTask;import java.text.ParseException;import org.quartz.CronTrigger;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.impl.StdSchedulerFactory;public class QuartzManager { private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory(); private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME"; private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME"; @SuppressWarnings("unused") public static void addJob(String jobName,Class cls,String time,String workFlowId,String timerTaskId){ try { Scheduler sched= gSchedulerFactory.getScheduler(); JobDetail jobDetail =new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任务名,任务组,任务执行类 jobDetail.getJobDataMap().put("workFlowId", workFlowId); jobDetail.getJobDataMap().put("timerTaskId", timerTaskId); // 触发器 CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 任务名,触发时间 // 触发器时间设定 trigger.setCronExpression(time); //添加定时任务 sched.scheduleJob(jobDetail, trigger); if(!sched.isShutdown()){ sched.start(); } } catch (SchedulerException e) { throw new RuntimeException(e); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void removeJob(String jobName) { try { Scheduler sched = gSchedulerFactory.getScheduler(); sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器 //可以移除触发器吗?如果移除会影响其他的定时任务吗?是应该重启吗? sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器 sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务 } catch (Exception e) { throw new RuntimeException(e); } System.out.println("删除定时任务:"+jobName); } public static void modifyJobTime(String jobName, String time,String workFlowId, String timerTaskId) { try { Scheduler sched = gSchedulerFactory.getScheduler(); CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName,TRIGGER_GROUP_NAME); if (trigger == null) { return; } String oldTime = trigger.getCronExpression(); if (!oldTime.equalsIgnoreCase(time)) { JobDetail jobDetail = sched.getJobDetail(jobName,JOB_GROUP_NAME); Class objJobClass = jobDetail.getJobClass(); removeJob(jobName); addJob(jobName, objJobClass, time,workFlowId, timerTaskId); } } catch (Exception e) { throw new RuntimeException(e); } } public static void addJobManager(String jobName,Class cls,String time){ try { Scheduler sched= gSchedulerFactory.getScheduler(); JobDetail jobDetail =new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任务名,任务组,任务执行类 // 触发器 CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 任务名,触发时间 // 触发器时间设定 trigger.setCronExpression(time); //添加定时任务 sched.scheduleJob(jobDetail, trigger); if(!sched.isShutdown()){ sched.start(); } } catch (SchedulerException e) { throw new RuntimeException(e); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void startJobs(){ Scheduler sched; try { sched = gSchedulerFactory.getScheduler(); sched.start(); } catch (SchedulerException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
分割点:jar包图片
首先写好这么一个最重要的类,其次再写一个执行的逻辑的类,如下部分,这里不要复制我的代码,你自己写一个类,哪怕是输出system.out.println(“123”);前往不要忘了继承自Job
public class QuartzCheckDatabaseMail implements Job { public static Logger log = Logger.getLogger(QuartzCheckDatabaseMail.class); @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { String RMIIP=AdminUtil.getParameter("RMIIP"); String recipients=AdminUtil.getParameter("recipients"); Mail mail= new Mail(); String hospitalNames=AdminUtil.getParameter("hospitalNames"); String hospitalUrls=AdminUtil.getParameter("hospitalUrls"); String mailMessage=mail.connectInfor(hospitalUrls,"BI_MO", "BI_MO"); log.info("开始RMI通信"); try { IMail Imail=(IMail)Naming.lookup(RMIIP+"/IMail"); Imail.sendMail(mailMessage,"各数据库连接情况(能否正常连接)",recipients); } catch (RemoteException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (NotBoundException e) { e.printStackTrace(); } }
最后再记下基础知识:commons-collection.jar、commons-logging、jta 这三jar包的作用。
commons-collection使用
源于Jakarta Jakarta做commons系列的目的是代码的重用,将一些可以通过的包做成组件。
可以当成Java.util的扩展
commons-collection的包结构:
org.apache.commons.collections – Commons Collections自定义的一组公用的接口和工具类
org.apache.commons.collections.bag – 实现Bag接口的一组类
org.apache.commons.collections.bidimap – 实现BidiMap系列接口的一组类
org.apache.commons.collections.buffer – 实现Buffer接口的一组类
org.apache.commons.collections.collection – 实现java.util.Collection接口的一组类
org.apache.commons.collections.comparators – 实现java.util.Comparator接口的一组类
org.apache.commons.collections.functors – Commons Collections自定义的一组功能类
org.apache.commons.collections.iterators – 实现java.util.Iterator接口的一组类
org.apache.commons.collections.keyvalue – 实现集合和键/值映射相关的一组类
org.apache.commons.collections.list – 实现java.util.List接口的一组类
org.apache.commons.collections.map – 实现Map系列接口的一组类
org.apache.commons.collections.set – 实现Set系列接口的一组类
commons-logging的作用
我们都知道log4j是用来记录程序运行时的情况的,但是在一个web项目中,不可能简单的将log4j或者其他记录日志的jar
包植入程序,这个时候common-logging就派上用场了,有了它后,只需要将类似log4j这样的日志包导入classpath中,就可以
被应用自动作为低层实现。类里面引用也只需要public static Logger log=Logger.getLogger(类名.class);然后log.info();
jta jar包的作用
jta: java transaction API
相对于JDBC来说,jta是多库的事务(事务:要么全过,要么都不过)
- 定时操作,公司里叫定时任务调度,我用Quartz(一)
- Quartz 定时任务调度
- quartz定时任务调度
- Quartz定时任务调度
- 定时任务调度工具之Quartz(一)
- Quartz+Spring 分布式定时任务调度(一)- 环境搭建
- 任务调度框架Quartz(一) Quartz——一个强大的定时任务调度框架
- quartz定时任务调度学习
- quartz实现定时任务调度
- Spring+Quartz定时任务调度
- quartz的定时调度任务
- spring+quartz定时任务调度
- spring定时任务调度quartz
- spring 定时服务调度quartz(一)
- Java任务调度框架Quartz入门教程指南(一) Quartz——一个强大的定时任务调度框架
- quartz任务调度框架实现任务定时执行,不传参的配置(一)
- Quartz任务调度、手动执行定时任务
- quartz(定时任务)
- JAVA设计模式之单例模式
- 依赖
- Java除了基本类型,其它都是引用传值,传值是改变变量引用的方向
- 第一次用python连接mysql数据库
- 深度学习--caffe(1)
- 定时操作,公司里叫定时任务调度,我用Quartz(一)
- keras Usage of metrics 评价指标
- 关于java web项目使用log4j / 当装了两个tomcat后,如何修改tomcat端口
- 一个最简单的线程
- array_search,,随笔 7.5
- [递推 || 容斥 FFT] SRM 717 div1 DerangementsStrikeBack
- python003基础数据类型
- Android DEX动态加载中的Cookie
- fredora中添加opencv路径