进来项目中用到了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.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. C#字符串中的中文逗号转英文逗号

    public static string ToDBC(string input) { char[] c = input.ToCharArray(); for (int i = 0; i < c. ...

  2. Java - 延迟初始化

    延迟初始化(lazy initialization),也就是在真正被使用的时候才开始初始化的技巧. 不论是静态还是实例,都可以进行延迟初始化. 其本质是初始化开销和访问开销之间的权衡. 毕竟是一种优化 ...

  3. BAT技术需求,你能达到多少?

    作为中国互联网界的传奇和标杆企业,BAT 三家公司的一举一动受互联网人的精密亲密关注.进入 BAT 成为大厂的一员成了许多互联网人职业生活生存追逐的方针之一. 本文的作者作为一个非科班毕业,出身于三流 ...

  4. idea创建maven的web工程

    然后一路点next 接下去添加tomcat 成功 控制台出现乱码的话 输入:-Dfile.encoding=UTF-8 控制台乱码解决

  5. Notepad++去除COPY代码行号的几种方法

    解2:打开 Notepad++,按住 Alt,鼠标点击拖出选择框,这个是列选 方法,相当拉风: 效果图如下

  6. js-权威指南学习笔记18

    1.除mouseenter和mouseleave外的所有鼠标事件都能冒泡. 2.传递给鼠标事件处理程序的事件对象有clientX和clientY属性,它们制订了鼠标指针相对于包含窗口的坐标. 3.一个 ...

  7. 【朴灵评注】JavaScript 运行机制详解:再谈Event Loop

    PS: 我先旁观下大师们的讨论,得多看书了~   别人说的:“看了一下不觉得评注对到哪里去,只有吹毛求疵之感. 比如同步异步介绍,本来就无大错:比如node图里面的OS operation,推敲一下就 ...

  8. centos 快速安装wordpress

    1.两种方式得到Wordpress 首先你可以去wordpress官方网站看下最新的wordpress的下载地址多少.比如wordpress 3.9.1的下载地址是: http://cn.wordpr ...

  9. jQuery实现大图轮播

    css样式: *{    margin: 0;    padding: 0;}ul{    list-style:none;}.slideShow{    width: 620px;    heigh ...

  10. CSS 几款比较常用的翻转特效

    第一个:360度翻转特效 <style>* { margin:0; padding:0; } .aa { width: 220px; height: 220px; margin: 0 au ...