quartz开发环境搭建
进来项目中用到了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开发环境搭建的更多相关文章
- 若依微服务版本 Windows下开发环境搭建
看了若依官网的教程,搭建环境还是踩了坑,简单整理一下 1.下载地址:https://gitee.com/y_project/RuoYi-Cloud 2.本地环境(仅供参考) JDK1.8 Mysql ...
- python开发环境搭建
虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...
- IntelliJ IDEA安装及jsp开发环境搭建
一.前言 现在.net国内市场不怎么好,公司整个.net组技术转型,就个人来说还是更喜欢.net,毕竟不是什么公司都像微软一样财大气粗开发出VS这样的宇宙级IDE供开发者使用,双击sln即可打开项目, ...
- Qt for Android开发环境搭建及测试过程记录
最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ...
- node.js之开发环境搭建
一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...
- TODO:小程序开发环境搭建
TODO:小程序开发环境搭建 1.第一步当然是要先注册小程序了 2.登录到小程序 a)完善小程序信息,如名称,图标,描述 3.绑定开发者 4.获取AppID,并设置服务器信息 5.下载并安装开发者工具 ...
- Eclipse中Python开发环境搭建
Eclipse中Python开发环境搭建 目 录 1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...
- 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)运行的是 ...
- Eclipse swt开发环境搭建
原料: eclipse swt.下载链接为: Eclipse 4.6.2 Release Build: 4.6.2 配置说明: Developing SWT applications using Ec ...
随机推荐
- css3 transition(转换)笔记
之前transition也用过,大都是ctrl+c,然后ctrl+v,没有了解太详细,这次对transition的应用源自侧边抽屉展开收起的动画效果需要. W3C标准中对css3的transition ...
- drawRect:和layoutSubview的区别
关于这两个方法的区别 还是有点意思的. UIView的setNeedsDisplay和setNeedsLayout方法.首先两个方法都是异步执行的.setNeedsDisplay会调用自动调用draw ...
- iOS字体打印
//打印所以字体 NSArray *familyNames = [UIFont familyNames]; for(NSString *familyName in familyNames) ...
- [源码] 定义String s="abcd", 求长度
一般会答: s.length() 看源码是如何实现的: /** * Returns the length of this string. * The length is equal to the nu ...
- vue的v-html插值样式问题
content使用html插入文本和图片 使用scoped样式,渲染失败. 原因: 解决方案: 采用全局样式 或另外再加style标签单独渲染
- Codeforces 1097 Alex and a TV Show
传送门 除了操作 \(3\) 都可以 \(bitset\) 现在要维护 \[C_i=\sum_{gcd(j,k)=i}A_jB_k\] 类比 \(FWT\),只要求出 \(A'_i=\sum_{i|d ...
- (一)windows下安装MongoDB解压版
windows下安装MongoDB解压版 我安装的是(mongodb-win32-x86_64-2008plus-ssl-4.0.8.zip)版本 亲测可以使用. 连接: Windows下MongoD ...
- HTML5和IOS、Android之间的交互
HTML5向IOS.Android传参: html给native传参需要注意三点: 1.判断终端设备,一般我们都是双系统开发,android和ios语言又不一样:我们需要用不同的方法给他们传递参数: ...
- elixir 模块
模块定义 defmodule 函数定义 def 私有函数 defp --相当于其他语言 private iex(29)> defmodule Math do...(29)> def ...
- asp:FileUpload 上次图片
<asp:FileUpload ID="FileUpload附件" runat="server" Width="200px" /> ...