Spring 4.2.5 + Quartz 2.2.0整合
jar包使用的Maven库管理的,在这就不罗列了,注意下只有spring3.x以上的版本才支持quartz2.x的版本。
配置文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
- xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
- http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"
- default-autowire="byName" default-lazy-init="false">
- <!-- 定时任务配置 scheduler 方式 注解 暂时不支持动态更新 -->
- <context:component-scan base-package="org.core.timer" />
- <task:executor id="executor" pool-size="5" />
- <task:scheduler id="scheduler" pool-size="10" />
- <bean id="taskJob" class="orgcore.timer.Job"/>
- <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="group" value="job_work"/>
- <property name="name" value="job_work_name"/>
- <!--false表示等上一个任务执行完后再开启新的任务-->
- <property name="concurrent" value="false"/>
- <property name="targetObject">
- <ref bean="taskJob"/>
- </property>
- <property name="targetMethod">
- <value>oneOClockPerDay</value>
- </property>
- </bean>
- <!-- 调度触发器 -->
- <bean id="taskDemoServiceTaskCronTrigger"
- class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
- <property name="name" value="taskDemoServiceTaskCronTrigger"/>
- <property name="group" value="DEFAULT"/>
- <property name="jobDetail">
- <ref bean="jobDetail" />
- </property>
- <property name="cronExpression" value="0/5 * * * * ?"/>
- </bean>
- <!-- 定时任务调度器 -->
- <bean id="schedulerFactory" lazy-init="false" autowire="no"
- class="org.springframework.schedling.quartz.SchedulerFactoryBean">
- <property name="triggers">
- <list>
- <!--<ref bean="taskDemoServiceTaskCronTrigger"></ref>-->
- </list>
- </property>
- </bean>
- </beans>
- 由于本人是新手,更深的层次我也不懂,就简单罗列下我理解的东西,各位看官请多指教!
在这个配置文件中,这是实现了一个简单的任务,
- taskJob:我自己定义的一个job类,没有实现Quartz的job接口,使用配置文件的方式实现。
- jobDetail:用上面定义好的taskJob来填充jobDetail,
- <property name="targetObject">
- <ref bean="taskJob"/>
- </property>
- <property name="targetMethod">
- <value>oneOClockPerDay</value>
- </property>
使用这种方式把自定义job类绑定,触发时执行类里的oneOClockPerDay方法
- public class Job {
- public void oneOClockPerDay(){
- org.jeecgframework.core.util.LogUtil.info("1h");
- System.out.println("===============asda========================");
- }
- }
- taskDemoServiceTaskCronTrigger:自定义的CronTrigge触发器,绑定好上变设定好的设置好的jobDetail,设置好触发时间。
- schedulerFactory:scheduler工厂,lazy-init="false" autowire="no"这两个设置可以在tomcat启动时触发定时任务。<ref bean="taskDemoServiceTaskCronTrigger">在这里设置好配置好的触发器
启动就能实现简单的定时任务。- 上边所说的是在配置文件配置好的定时任务,接下来我们实现动态的定时任务。(PS:我觉得配置文件只需要加上schedulerFactory的配置就可以了)
废话不多说,直接粘代码(我也说不明白..... 哈哈哈哈)- 创建/更新任务:
- public void creatJob(String triggerName,String groupName,String cronExpression ) {
- JobDetail jobDetail=null;
- CronTrigger trigger=null;
- TriggerKey triggerKey = new TriggerKey(triggerName,groupName);
- CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression );
- try {
- trigger= (CronTrigger) schedulerFactory.getTrigger(triggerKey);
- //判断触发器是否存在,存在更新,不存在创建
- if(trigger!=null){
- trigger=trigger.getTriggerBuilder().withIdentity(triggerKey)
- .withSchedule(scheduleBuilder).build();
- //按照新的参数重新构建任务
- schedulerFactory.rescheduleJob(triggerKey,trigger);
- }else {
- //QuartzJobFactory 这是自定义的job类 继承job接口 这就是不同于在配置文件中配置job类的另一种方法
- jobDetail = JobBuilder.newJob(QuartzJobFactory.class).withIdentity(triggerName, groupName).build();
- trigger = TriggerBuilder.newTrigger().
- withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
- //创建任务,配置文件schedulerFactory已经配置为tomcat启动后自启动,就不需要schedule.strat()启动了
- schedulerFactory.scheduleJob(jobDetail,trigger);
- }
- } catch (Exception e) {
- }
- }
暂停/开始触发器:
- public boolean startOrStop(String triggerName,
- boolean start) {
- TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, Scheduler.DEFAULT_GROUP);
- //获取trigger,即在spring配置文件中定义的 bean id="myTrigger"
- try {
- if (start) {
- schedulerFactory.resumeTrigger(triggerKey);
- return true;
- } else {
- schedulerFactory.pauseTrigger(triggerKey);
- return true;
- }
- } catch (SchedulerException e) {
- e.printStackTrace();
- return false;
- }
- }
删除任务:
- public voiddel(String triggerName,String groupName) throws SchedulerException {
- TriggerKey triggerKey=new TriggerKey(triggerName,groupName);
- schedulerFactory.pauseTrigger(triggerKey);//停止触发器
- schedulerFactory.unscheduleJob(triggerKey);//移除触发器
- schedulerFactory.deleteJob(JobKey.
- jobKey(triggerName,groupName);//删除任务
- }
自定义的QuartzJobFactory类
- public class QuartzJobFactory implements org.quartz.Job {
- @Override
- public void execute(JobExecutionContext context) throws JobExecutionException {
- System.out.println("任务成功运行");
- }
- }
Spring 4.2.5 + Quartz 2.2.0整合的更多相关文章
- spring利用javamail,quartz定时发送邮件 <转>
原文地址:spring利用javamail,quartz定时发送邮件 <转>作者:物是人非 spring提供的定时发送邮件功能,下面是一个简单的例子以供大家参考,首先从spring配置文件 ...
- 信步漫谈之Quartz—分布式调度(整合spring早期版本【低于spring3.1】)
一.环境 使用的jar包:spring2.5.6.quartz1.8.6 二.注意点 因为spring内置的quartz版本变化,所以存在spring和quartz版本接口兼容情况,如下: 1)spr ...
- 项目ITP(六) spring4.0 整合 Quartz 实现动态任务调度
前言 系列文章:[传送门] 项目需求: http://www.cnblogs.com/Alandre/p/3733249.html 上一博客写的是基本调度,后来这只能用于,像每天定个时间 进行数据库备 ...
- 项目ITP(五) spring4.0 整合 Quartz 实现任务调度
前言 系列文章:[传送门] 项目需求: 二维码推送到一体机上,给学生签到扫描用.然后需要的是 上课前20分钟 ,幸好在帮带我的学长做 p2p 的时候,接触过.自然 quartz 是首选.所以我就配置了 ...
- Spring定时(任务)刷新-quartz
Quartz是一个完全由java编写的开源作业调度框架.他可以与J2EE.J2SE集成,用与处理定时任务.定时刷新的需求.此处使用为与Spring项目集成. 在SpringMVC项目中使用quartz ...
- Spring研磨分析、Quartz任务调度、Hibernate深入浅出系列文章笔记汇总
Spring研磨分析.Quartz任务调度.Hibernate深入浅出系列文章笔记汇总 置顶2017年04月27日 10:46:45 阅读数:1213 这系列文章主要是对Spring.Quartz.H ...
- spring多个定时任务quartz配置
spring多个定时任务quartz配置 <?xml version=”1.0″ encoding=”UTF-8″?> <beans xmlns=”http://www.spring ...
- Spring/Spring boot正确集成Quartz及解决@Autowired失效问题
周五检查以前Spring boot集成Quartz项目的时候,发现配置错误,因此通过阅读源码的方式,探索Spring正确集成Quartz的方式. 问题发现 检查去年的项目代码,发现关于QuartzJo ...
- Quartz.net 2.0的使用说明
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于WinForm和ASP.NET应用中.它提供了巨大的灵活性而不牺牲 ...
随机推荐
- ELK重难点总结和整体优化配置
本文收录在Linux运维企业架构实战系列 做了几周的测试,踩了无数的坑,总结一下,全是干货,给大家分享~ 一.elk 实用知识点总结 1.编码转换问题(主要就是中文乱码) (1)input 中的cod ...
- js中的Hook
1. 简单理解: hook(钩子)就是: 把将要执行的的函数或者一系列动作注册到一个统一的接口下面, 当应用程序调用此接口(即hook)时,就等于调用了这一系列动作.
- ng-if ng-show ng-hide区别(面试题)
ng-if ng-show ng-hide区别 实现原理方面: ng-show/ng-hide是通过修改css样式方式控制元素显示与隐藏,对应的DOM元素会一直存在于当前页面中: 而ng-if根据表 ...
- 【Bootstrap】 一些提示信息插件
前端总是会有很多信息提示的时候,最简单的可以用javascript自带的alert,confirm等.这些虽然和js的配合很好,但是很丑. bootstrap给我们提供了一些不同的方案比如modal的 ...
- 【Zabbix】 ZBX的豆知识
ZBX ZBX虽然看上去是个很庞大的系统,但是相对架构还是比较简单的,而且我接触比较长时间了,很多东西觉得没有什么记的必要,所以以这种零碎的形式来记录一些小知识点. ■ ZBX用户权限问题 ZBX用户 ...
- Redis --> Redis架构设计
Redis架构设计 一.前言 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列 ...
- 转载:解决微信OAuth2.0网页授权回调域名只能设置一个的问题
项目地址:https://github.com/HADB/GetWeixinCode 说明:微信项目很多,但是回调域名有限,经常使用,做个笔记. 解决微信OAuth2.0网页授权只能设置一个回调域名的 ...
- 【数据结构】赫夫曼树的实现和模拟压缩(C++)
赫夫曼(Huffman)树,由发明它的人物命名,又称最优树,是一类带权路径最短的二叉树,主要用于数据压缩传输. 赫夫曼树的构造过程相对比较简单,要理解赫夫曼数,要先了解赫夫曼编码. 对一组出现频率不同 ...
- Android中的layout_gravity和gravity的区别
在Android的布局中,除了padding和margin容易弄混之外,还有layout_gravity和gravity.按照字面意思来说,layout_gravity就是相对于layout来设置的. ...
- JavaScript(第二天)【语法,变量】
一.语法构成 区分大小写 ECMAScript中的一切,包括变量.函数名和操作符都是区分大小写的.例如:text和Text表示两种不同的变量. 标识符 所谓标识符,就是指变量.函数.属性的名字,或 ...