进来项目中用到了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. golang chan 发送接收测试数据

    测试代码: package main import (     "fmt"     "time" ) const (     num = 10000000  / ...

  2. Merge into用法

    简单的例子:好记性不如烂笔头 其基本语法规则是 merge into 目标表 a using 源表 b on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……) when ...

  3. Intellij IDEA run coverage之覆盖率测试

    Intellij IDEA run coverage之覆盖率测试 idea 的coverage + 我们自己写的测试用例.最后看一下,我们要测的代码有没有测试到,这是一个不错的提高代码质量的方法. i ...

  4. CSS垂直翻转/水平翻转提高web页面资源重用性——张鑫旭

    一.CSS下兼容性的元素水平/垂直翻转实现 随着现代浏览器对CSS3的支持愈发完善,对于实现各个浏览器兼容的元素的水平翻转或是垂直翻转效果也就成为了可能.相关的CSS代码如下: /*水平翻转*/ .f ...

  5. markdown 语法备忘

    markdwon语法, 增加以下CSS代码,可以对markdwon语法产生的文件进行分页操作. <div style="page-break-after:always;"&g ...

  6. vs中发布WebSever时启用HTTP-POST和HTTP-GET这两种协议

    一.问题介绍 在vs中建立一个websever项目时候默认是禁用HTTP-POST和HTTP-GET这两种协议的.但是如果你是在本机上去调试或者是在iis中浏览都会有HTTP-POST这种方式,因为这 ...

  7. 【node】用koa搭建一个增删改服务(一)

    前文,vue分类里有一个日志demo的练习,这篇文章就是介绍针对日志demo的服务是怎么写的 一.koa搭建项目 1. npm init 2. npm install koa 二.建数据库 下面是项目 ...

  8. C# Base64Helper

    public static class Base64Helper { /// <summary> /// base64字符保存图片到本 /// </summary> /// & ...

  9. top,job,user,file,alias

    1.系统进程 2.系统资源管理 3.作业管理 4.用户管理 5.文件权限 6.别名定义       一.系统进程 1.进程的定义 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了 ...

  10. c# 线程池:开启10个线程运行Fibonacci,并在所有线程运行完后,得出结果。

    namespace CAThreadPool { class ThreadpoolDemo6 { static void Main(string[] args) { ; // One event is ...