进来项目中用到了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. PowerDesigner设置默认值名称规则

    一.需求背景: 使用PowerDesigner创建表时,若设置某列默认值时,自动生成规则的默认值名称.比如说:DF_表名_列名 二.设置步骤: 1.选择Database—>Edit Curren ...

  2. JavaScript 带参数函数定义

    函数的参数parameters在函数中充当占位符(也叫形参)的作用,参数可以为一个或多个.调用一个函数时所传入的参数为实参,实参决定着形参真正的值. 这是带有两个参数的函数, param1 和 par ...

  3. ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock 问题修改

    ubuntu 常见错误–Could not get lock /var/lib/dpkg/lock 通过终端安装程序sudo apt-get install xxx或者apt-get update时出 ...

  4. Python import搜索的路径顺序

    在程序中导入时,如下顺序 1.Python 标准库模块2.Python 第三方模块3.应用程序自定义模块   import的搜索顺序: 首先判断这个module是不是built-in即内建模块,如果是 ...

  5. 不使用JavaScript让IE浏览器支持HTML5元素——张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2515 如果我们不做什 ...

  6. canvas框架::createjs入门

    createjs是一个轻量级的框架,稍微有点时间和耐心,就可以把全部源代码都看一遍,毕竟只有三十几个js文件.地址:http://www.createjs.com/ 开发createjs的动画或游戏, ...

  7. 怎么打印 sql 语句

    1.添加jar包 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api< ...

  8. linux rpm之已安装包校验、rpm包中文件提取

    已安装包校验 rpm -V 已安装的包名-V 校验指定rpm包中的文件 rpm -V pth没有任何提示,说明自安装后没有做过任何修改 rpm包中文件提取 比如对一个系统配置文件误操作,可以根据这个文 ...

  9. 【转】grep -v grep

    1.grep 是查找含有指定文本行的意思,比如grep test 就是查找含有test的文本的行 2.grep -v 是反向查找的意思,比如 grep -v grep 就是查找不含有 grep 字段的 ...

  10. Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能

    前言 JMS介绍:JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...