quartz开发环境搭建

时间:2022-12-29 19:20:58

  进来项目中用到了quartz作为调度框架,在搭建框架的时候添加了一个调度模块,现将代码分享出来,给有需要的朋友参考。这个任务调度可以作为一个单独的模块去开发,所以并不会改变原有的架构,话不多说,直接上代码。

1.添加Spring的事件监听,IOC容器启动完成后初始化任务群,添加任务也主要是在这个类里面添加

 package com.sunyard.main;

 import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent; import com.sunyard.cache.SystemCache;
import com.sunyard.constans.Constants;
import com.sunyard.quartz.WKTriggerFactory;
import com.sunyard.quartz.jobs.TestJob; public class InitDataAfterSpring implements ApplicationListener<ContextRefreshedEvent>{ private static final Logger logger = LogManager.getLogger(Constants.LOGNAME); @Override
public void onApplicationEvent(ContextRefreshedEvent event) {
if(event.getApplicationContext().getParent() == null){
//初始化测试定时任务
TestJob job = (TestJob) SystemCache.getBean("testJob");
/**
* job 需要执行的任务
* execute 任务中需要执行的方法
* 0/10 * * * * ? 执行任务的时间,具体可以参考我有一篇
*/
WKTriggerFactory.newCronTrigger(job, "execute",
"0/10 * * * * ?");
}
}
}

2.任务调度工厂

 package com.sunyard.quartz;

 import java.util.HashMap;
import java.util.Map; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quartz.Trigger;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean; import com.sunyard.constans.Constants;
import com.sunyard.quartz.jobs.WKJob; public class WKTriggerFactory { private static final Logger logger = LogManager.getLogger(Constants.LOGNAME);
private static final String OPERATER_NAME = "【构建触发器】"; private static Map<String,SchedulerFactoryBean> schedulerFactoryMaps = new HashMap<String,SchedulerFactoryBean>();
private WKTriggerFactory(){
} public static void newCronTrigger(WKJob wkJob,String invokeMethod, String croExpression){
try {
//重复的任务,做覆盖操作。
if(schedulerFactoryMaps.containsKey(wkJob.getKey())){
removeScheduler(wkJob.getKey());
}
MethodInvokingJobDetailFactoryBean jobDetailFacroty = new MethodInvokingJobDetailFactoryBean();
jobDetailFacroty.setTargetObject(wkJob);
jobDetailFacroty.setTargetMethod(invokeMethod);
jobDetailFacroty.setName(wkJob.getKey());
jobDetailFacroty.setConcurrent(true);
jobDetailFacroty.afterPropertiesSet(); CronTriggerFactoryBean triggerfactory = new CronTriggerFactoryBean();
triggerfactory.setJobDetail(jobDetailFacroty.getObject());
triggerfactory.setCronExpression(croExpression);
triggerfactory.setName(wkJob.getKey());
triggerfactory.afterPropertiesSet(); SchedulerFactoryBean schdulerFactory = new SchedulerFactoryBean();
schdulerFactory.setTriggers(new Trigger[]{triggerfactory.getObject()});
schdulerFactory.afterPropertiesSet();
schdulerFactory.start(); schedulerFactoryMaps.put(wkJob.getKey(), schdulerFactory);
} catch (Exception e) {
logger.error(OPERATER_NAME, e);
}
} public static void removeScheduler(String key){
try {
SchedulerFactoryBean schdulerFactory = schedulerFactoryMaps.remove(key);
if(schdulerFactory != null){
schdulerFactory.destroy();
}else{
logger.info(OPERATER_NAME + "定时任务已被移除。");
}
} catch (Exception e) {
logger.error(OPERATER_NAME, e);
}
} }

3.抽象任务类

 package com.sunyard.quartz.jobs;

 import java.util.UUID;

 import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import com.sunyard.constans.Constants; public abstract class WKJob { //private static final Logger logger = LogManager.getLogger(Constants.LOGNAME);
//private static final String OPERATER_NAME = "【触发器】"; protected String key = UUID.randomUUID().toString(); public void execute(){
doAction();
//logger.info(OPERATER_NAME + "执行完毕,移除定时任务。");
//WKTriggerFactory.removeScheduler(key);
} public abstract void doAction(); public String getKey() {
return key;
} public void setKey(String key) {
this.key = key;
} }

4.具体任务类

 package com.sunyard.quartz.jobs;

 import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component; import com.sunyard.constans.Constants; @Component("testJob")
@Scope(value = "prototype")
public class TestJob extends WKJob{ private static final Logger logger = LogManager.getLogger(Constants.LOGNAME);
private static final String OPERATER_NAME = "【测试定时器】"; @Override
public void doAction() {
try {
System.out.println("测试定时任务");
} catch (Exception e) {
logger.error(OPERATER_NAME, e);
}
logger.info(OPERATER_NAME + "结束了...");
}
}

启动服务器观看效果:

 测试定时任务
2017-07-25 17:38:50 GMT+08:00 INFO com.sunyard.quartz.jobs.TestJob 24 doAction - 【测试定时器】结束了...
测试定时任务
2017-07-25 17:39:00 GMT+08:00 INFO com.sunyard.quartz.jobs.TestJob 24 doAction - 【测试定时器】结束了...
测试定时任务
2017-07-25 17:39:10 GMT+08:00 INFO com.sunyard.quartz.jobs.TestJob 24 doAction - 【测试定时器】结束了...
测试定时任务
2017-07-25 17:39:20 GMT+08:00 INFO com.sunyard.quartz.jobs.TestJob 24 doAction - 【测试定时器】结束了...
测试定时任务
2017-07-25 17:39:30 GMT+08:00 INFO com.sunyard.quartz.jobs.TestJob 24 doAction - 【测试定时器】结束了...

我设置的是10秒钟执行一次。

最后强调一下,我的spring版本是3.1.0 以及quartz-2.2.1.jar 如果遇到功能失效或者其他的问题,应当有限考虑jar包的版本问题。还有Spring的IOC容器中必须配置第一步操作的中的监听器类,如果使用的是

SpringMvc框架,应当放在SpringMvc的容器中。

<bean class="com.sunyard.quartz.InitDataAfterSpring"/>

如果有问题可以加我QQ:774346810

quartz开发环境搭建的更多相关文章

  1. 若依微服务版本 Windows下开发环境搭建

    看了若依官网的教程,搭建环境还是踩了坑,简单整理一下 1.下载地址:https://gitee.com/y_project/RuoYi-Cloud 2.本地环境(仅供参考) JDK1.8 Mysql  ...

  2. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造*还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  3. IntelliJ IDEA安装及jsp开发环境搭建

    一.前言 现在.net国内市场不怎么好,公司整个.net组技术转型,就个人来说还是更喜欢.net,毕竟不是什么公司都像微软一样财大气粗开发出VS这样的宇宙级IDE供开发者使用,双击sln即可打开项目, ...

  4. Qt for Android开发环境搭建及测试过程记录

    最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ...

  5. node&period;js之开发环境搭建

    一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...

  6. TODO:小程序开发环境搭建

    TODO:小程序开发环境搭建 1.第一步当然是要先注册小程序了 2.登录到小程序 a)完善小程序信息,如名称,图标,描述 3.绑定开发者 4.获取AppID,并设置服务器信息 5.下载并安装开发者工具 ...

  7. Eclipse中Python开发环境搭建

    Eclipse中Python开发环境搭建  目 录  1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...

  8. Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建

    目前,微软针对Windows IoT计划支持的硬件包括树莓派2,Minnow Board MAX 和Galileo (Gen 1和Gen 2).其中,Galileo (Gen 1和Gen 2)运行的是 ...

  9. Eclipse swt开发环境搭建

    原料: eclipse swt.下载链接为: Eclipse 4.6.2 Release Build: 4.6.2 配置说明: Developing SWT applications using Ec ...

随机推荐

  1. JQuery Easy Ui DataGrid

    Extend from $.fn.panel.defaults. Override defaults with $.fn.datagrid.defaults. The datagrid display ...

  2. Radius 远程用户拨号认证系统

    RADIUS 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . RADIUS:Remote Authentication Dial In User Service,远程用户拨号认证系 ...

  3. SQL Server 2008 定时作业的制定&lpar;SQL2005参考此方法&rpar; 转

    --  Author : htl258(Tony)--  Date   : 2010-04-29 19:07:45--  Version:Microsoft SQL Server 2008 (RTM) ...

  4. 在ASP&period;NET MVC中以post方式传递数组参数的示例

    最近在工作中用到了在ASP.NET MVC中以post方式传递数组参数的情况,记录下来,以供参考. 一.准备参数对象 在本例中,我会传递两个数组参数:一个字符串数组,一个自定义对象数组.这个自定义对象 ...

  5. ios开发——面试篇C语言精华

    面试篇C语言精华    1.面向过程:分析解决问题所需要的步骤,然后用函数把这些步骤一步一步实 现. 面向对象:直接描述客观世界的对象及其相互关系.现实世界中任何实体都 可以看作是对象,对象之间通过消 ...

  6. Maven教程(1)--maven的下载、安装与配置

    Maven下载 下载地址:http://maven.apache.org/download.cgi 下载后,解压得到 Maven目录分析: bin文件夹:含有mvn运行的脚本 boot文件夹:含有pl ...

  7. code is 9998&semi;desc is 插入失败exception is org&period;hibernate&period;exception&period;JDBCConnectionException&colon; Could not op

    1.错误描述 [ERROR:]2015-05-05 09:27:12,090 [插入失败] org.hibernate.exception.JDBCConnectionException: Could ...

  8. CXF安装和配置时出现Exception in thread "main" java&period;lang&period;UnsupportedClassVersionError&colon;异常?

    异常信息: C:\Users\>wsdl2java -h Exception in thread "main" java.lang.UnsupportedClassVersi ...

  9. linux安装MongoDB

    安装 32bit的mongodb最大只能存放2G的数据,64bit就没有限制 到官网,选择合适的版本下载,本次下载3.4.0版本 解压 tar -zxvf mongodb-linux-x86_64-u ...

  10. BZOJ1207 &lbrack;HNOI2004&rsqb;打鼹鼠 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1207 题目概括 n*n的方阵上,一开始你可以在任何地方. 你每秒可以移动一格,接下来有m只地鼠冒出 ...