定时器设置及同服务器一块启动和关闭
来源:互联网 发布:淘宝二手回收在哪里 编辑:程序博客网 时间:2024/04/28 07:16
第一步,定时器同服务器一块启动,需要用到监听. web.xml文件中配置如下代码
<listener> <listener-class>com.sicmed.common.listerner.TimingTaskSchedule</listener-class></listener>然后写对应的监听类,代码如下:
public class TimingTaskSchedule implements ServletContextListener { // 服务器启动时执行该事件 public void contextInitialized(ServletContextEvent arg0) { try { QuartzLoad.run(); } catch (Exception e) { e.printStackTrace(); } } // 服务器停止时执行该事件 public void contextDestroyed(ServletContextEvent arg0) { try { QuartzLoad.stop(); } catch (Exception e) { e.printStackTrace(); } }}继续写监听类中执行的方法(定时任务),代码如下:
public class QuartzLoad { public static void run() { LoggerUtils.debug(TimingQueryJob.class, "====================定时任务执行===================" + new Date() + "==============="); TimingQueryJob timingQueryJob = new TimingQueryJob(); String jobName = "quartz"; String jobGroupName = "b"; String triggerName = "c"; String triggerGroupName = "d"; //每天晚上11点执行0 * 23 * * ? try { //每天凌晨两点执行定时器 QuartzManager.addJob(jobName, jobGroupName, triggerName, triggerGroupName, timingQueryJob, "0 * 2 * * ?"); } catch (SchedulerException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } //停止 public static void stop() { try { QuartzManager.removeJob("quartz", "b", "c", "d"); LoggerUtils.debug(TimingQueryJob.class, "==============定时任务结束===========" + new Date() + "==============="); } catch (SchedulerException e) { e.printStackTrace(); } }}上述代码需要在pom.xml文件中引入quartz定时器jar(注意版本,不同版本定时器配置有区别)
<dependency> <artifactId>quartz</artifactId> <groupId>org.opensymphony.quartz</groupId> <version>1.6.1</version></dependency>对上述定时器做个介绍:
jobName:任务名称 jobGroupName:任务组名 triggerName:触发器名称 triggerGroupName:触发器组名 (我的项目中这些字段为了确定开启和关闭定时器随便写的)
还有一个定时器启动个关闭的管理类,代码如下:(附带定时器时间例子)
public class QuartzManager { private static SchedulerFactory sf = new StdSchedulerFactory(); private static String JOB_GROUP_NAME = "defaultGroup"; //默认任务组名 private static String TRIGGER_GROUP_NAME = "defaultTrigger"; //触发器组名 /** * 添加一个定时任务 * * @param jobName 任务名 * @param jobGroupName 任务组名 * @param triggerName 触发器名 * @param triggerGroupName 触发器组名 * @param job 任务 * @param time 时间设置,参考quartz说明文档 */ public static void addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName,Job job, String time) throws SchedulerException, ParseException { Scheduler sched = sf.getScheduler(); JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass());//任务名,任务组,任务执行类 //触发器 CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);//触发器名,触发器组 trigger.setCronExpression(time);//触发器时间设定 sched.scheduleJob(jobDetail, trigger); if (!sched.isShutdown()) sched.start(); } /** * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名) * * @param jobName * @param time * @throws SchedulerException * @throws ParseException */ public static void modifyJobTime(String jobName, String time) throws SchedulerException, ParseException { Scheduler sched = sf.getScheduler(); Trigger trigger = sched.getTrigger(jobName, TRIGGER_GROUP_NAME); if (trigger != null) { CronTrigger ct = (CronTrigger) trigger; ct.setCronExpression(time); sched.resumeTrigger(jobName, TRIGGER_GROUP_NAME); } } /** */ /** * 修改一个任务的触发时间 * * @param triggerName * @param triggerGroupName * @param time * @throws SchedulerException * @throws ParseException */ public static void modifyJobTime(String triggerName, String triggerGroupName, String time) throws SchedulerException, ParseException { Scheduler sched = sf.getScheduler(); Trigger trigger = sched.getTrigger(triggerName, triggerGroupName); if (trigger != null) { CronTrigger ct = (CronTrigger) trigger; //修改时间 ct.setCronExpression(time); //重启触发器 sched.resumeTrigger(triggerName, triggerGroupName); } } /** */ /** * 移除一个任务(使用默认的任务组名,触发器名,触发器组名) * * @param jobName * @throws SchedulerException */ public static void removeJob(String jobName) throws SchedulerException { Scheduler sched = sf.getScheduler(); sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);//停止触发器 sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);//移除触发器 sched.deleteJob(jobName, JOB_GROUP_NAME);//删除任务 } /** */ /** * 移除一个任务 * * @param jobName * @param jobGroupName * @param triggerName * @param triggerGroupName * @throws SchedulerException */ public static void removeJob(String jobName, String jobGroupName,String triggerName, String triggerGroupName) throws SchedulerException { Scheduler sched = sf.getScheduler(); sched.pauseTrigger(triggerName, triggerGroupName);//停止触发器 sched.unscheduleJob(triggerName, triggerGroupName);//移除触发器 sched.deleteJob(jobName, jobGroupName);//删除任务 } /** * 定时器时间设置 * "0 0 12 * * ?"每天中午十二点触发 "0 15 10 ? * *"每天早上10:15触发 "0 15 10 * * ?"每天早上10:15触发 "0 15 10 * * ? *"每天早上10:15触发 "0 15 10 * * ? 2005" 2005年的每天早上10:15触发 "0 * 14 * * ?"每天从下午2点开始到2点59分每分钟一次触发 "0 0/5 14 * * ?"每天从下午2点开始到2:55分结束每5分钟一次触发 "0 0/5 14,18 * * ?"每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发 "0 0-5 14 * * ?"每天14:00至14:05每分钟一次触发 "0 10,44 14 ? 3 WED"三月的每周三的14:10和14:44触发 "0 15 10 ? * MON-FRI"每个周一、周二、周三、周四、周五的10:15触发 "0 15 10 15 * ?"每月15号的10:15触发 "0 15 10 L * ?"每月的最后一天的10:15触发 "0 15 10 ? * 6L"每月最后一个周五的10:15 */}
阅读全文
0 0
- 定时器设置及同服务器一块启动和关闭
- 启动及关闭服务器
- 启动及关闭 MySQL 服务器
- Quartz之手动启动和关闭定时器简单示例
- MySql数据库服务器的启动和关闭
- MySQL服务器的启动和关闭
- MySql服务器的启动和关闭
- ORACLE 9I服务器启动和关闭
- MySql服务器的启动和关闭
- PostgreSQL服务器启动和关闭方法介绍
- GlassFish服务器批处理代码启动和关闭
- PostgreSQL服务器启动和关闭方法介绍
- apache服务器的启动和关闭
- PostgreSQL服务器启动和关闭方法介绍
- linux 服务器couchbase启动和关闭命令
- linux 服务器couchbase启动和关闭命令
- 设置linux自动启动和关闭tomcat
- 如何启动、关闭和设置ubuntu防火墙
- Linux下压缩和解压文件
- HTTP方法:get和post的区别
- MyEclipse下Maven的安装配置
- 问题 A: Hello World(JSU-ZJJ)
- mysql5.7官网直译优化和索引--索引统计的收集
- 定时器设置及同服务器一块启动和关闭
- 安装本地yum源
- TensorFlow学习笔记:Retrain Inception_v3(一)
- 用IO 字符流进行从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
- fullavatareditor 富头像上传编辑器
- Git 的 4 个阶段的撤销更改
- 易语言急速学习不到20分学会基本
- Spring MVC_1
- RestTemplate 返回实体类型