spring作业_Spring和石英:多作业计划服务

spring作业

作业调度对于应用程序来说是如此重要。 尤其是在大型项目中,处理大量工作可能是一个问题。 Spring和Quartz为解决该问题带来了巨大的好处。 本文展示了如何通过使用Spring和Quartz轻松地计划多个作业。

二手技术:

JDK 1.6.0_21
春天3.1.1
石英1.8.5 Maven的3.0.2

步骤1:建立已完成的专案
创建一个Maven项目,如下所示。 (可以使用Maven或IDE插件创建)

步骤2:图书馆
Spring依赖项已添加到Maven的pom.xml中。

<!-- Spring 3 dependencies -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version>
</dependency>

第3步:创建任务类别
将创建一个FirstTask类。

package com.otv.task;import org.apache.log4j.Logger;/*** First Task** @author  onlinetechvision.com* @since   24 Feb 2012* @version 1.0.0**/
public class FirstTask {private static Logger log = Logger.getLogger(FirstTask.class);/*** Execute this task**/public void execute() {log.debug("FirstTask runs successfully...");}
}

将创建SecondTask类。

package com.otv.task;import org.apache.log4j.Logger;/*** Second Task** @author  onlinetechvision.com* @since   24 Feb 2012* @version 1.0.0**/
public class SecondTask {private static Logger log = Logger.getLogger(SecondTask.class);/*** Execute this task**/public void execute() {log.debug("SecondTask runs successfully...");}
}

第4步:创建ISchedulerService接口
ISchedulerService接口已创建。

package com.otv.service;/*** Scheduler Service Interface** @author  onlinetechvision.com* @since   24 Feb 2012* @version 1.0.0**/
public interface ISchedulerService {/*** Execute First Task** @param* @throws* @return*/public void executeFirstTask();/*** Execute Second Task** @param* @throws* @return*/public void executeSecondTask();
}

步骤5:创建SchedulerService类别
SchedulerService类是通过实现ISchedulerService接口创建的。 该服务计划任务。

package com.otv.service;import com.otv.task.FirstTask;
import com.otv.task.SecondTask;/*** Scheduler Service Implementation** @author  onlinetechvision.com* @since   24 Feb 2012* @version 1.0.0**/
public class SchedulerService implements ISchedulerService {private FirstTask  firstTask;private SecondTask secondTask;/*** Execute First Task**/public void executeFirstTask() {getFirstTask().execute();}/*** Execute Second Task**/public void executeSecondTask() {getSecondTask().execute();}/*** Get First Task** @return FirstTask*/public FirstTask getFirstTask() {return firstTask;}/*** Set First Task** @param  firstTask First Task*/public void setFirstTask(FirstTask firstTask) {this.firstTask = firstTask;}/*** Get Second Task** @return SecondTask*/public SecondTask getSecondTask() {return secondTask;}/*** Set Second Task** @param  secondTask Second Task*/public void setSecondTask(SecondTask secondTask) {this.secondTask = secondTask;}
}

步骤6:建立应用程式类别
应用程序类已创建。 此类运行应用程序。

package com.otv.starter;import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Application Starter Class** @author  onlinetechvision.com* @since   24 Feb 2012* @version 1.0.0**/
public class Application {/*** Main method of the Application**/public static void main(String[] args) {new ClassPathXmlApplicationContext("applicationContext.xml");}
}

第7步:定义作业详细信息配置
在Spring中,可以通过两种方式定义作业详细信息 。 通过使用MethodInvokingJobDetailFactoryBean或扩展QuartzJobBean 。 在此示例中,已使用MethodInvokingJobDetailFactoryBean方法。 将targetObjecttargetMethod属性提供给MethodInvokingJobDetailFactoryBean

<!-- Job Details-->
<bean id="FirstTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="SchedulerService" /><property name="targetMethod" value="executeFirstTask" />
</bean><bean id="SecondTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="SchedulerService" /><property name="targetMethod" value="executeSecondTask" />
</bean>

步骤8:定义触发配置
在Spring中也可以通过两种方式定义触发器 。 通过定义SimpleTriggerBeanCronTriggerBean 。 使用SimpleTriggerBean时 ,将定义jobDetailrepeatIntervalstartDelay属性。 使用CronTriggerBean时 ,将定义jobDetailcronExpression属性。 在此示例中,第一个任务的重复间隔已设置为5秒 ,第二个任务的重复间隔已设置为12秒

<!-- Simple Trigger -->
<bean id="FirstSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property name="jobDetail" ref="FirstTaskJobDetail" /><property name="repeatInterval" value="5000" /><property name="startDelay" value="1000" />
</bean><!-- <bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property name="jobDetail" ref="SecondTaskJobDetail" /><property name="repeatInterval" value="12000" /><property name="startDelay" value="1000" /></bean> -->   <!-- Cron Trigger -->
<bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="SecondTaskJobDetail" /><property name="cronExpression" value="0/12 * * * * ?" />
</bean>

步骤9:定义SchedulerFactoryBean配置
最后,通过创建SchedulerFactoryBean配置作业详细信息触发器

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="jobDetails"><list><ref bean="FirstTaskJobDetail" /><ref bean="SecondTaskJobDetail" /></list></property><property name="triggers"><list><ref bean="FirstSimpleTrigger" /><ref bean="SecondSimpleTrigger" /></list></property>
</bean>

步骤10:创建applicationContext.xml
所有applicationContext.xml内容如下所示。

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- Beans Declaration --><bean id="FirstTask" class="com.otv.task.FirstTask"></bean><bean id="SecondTask" class="com.otv.task.SecondTask"></bean><bean id="SchedulerService" class="com.otv.service.SchedulerService"><property name="firstTask" ref="FirstTask" /><property name="secondTask" ref="SecondTask" /></bean><!-- Job Details--><bean id="FirstTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="SchedulerService" /><property name="targetMethod" value="executeFirstTask" /></bean><bean id="SecondTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="SchedulerService" /><property name="targetMethod" value="executeSecondTask" /></bean><!-- Simple Trigger --><bean id="FirstSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property name="jobDetail" ref="FirstTaskJobDetail" /><property name="repeatInterval" value="5000" /><property name="startDelay" value="1000" /></bean>
<!--<bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property name="jobDetail" ref="SecondTaskJobDetail" /><property name="repeatInterval" value="12000" /><property name="startDelay" value="1000" /></bean>
--><!-- Cron Trigger --><bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="SecondTaskJobDetail" /><property name="cronExpression" value="0/12 * * * * ?" /></bean><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="jobDetails"><list><ref bean="FirstTaskJobDetail" /><ref bean="SecondTaskJobDetail" /></list></property><property name="triggers"><list><ref bean="FirstSimpleTrigger" /><ref bean="SecondSimpleTrigger" /></list></property></bean></beans>

步骤11:运行项目
启动应用程序类后,将在下面显示输出日志:

25.02.2012 00:17:18 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:23 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:24 DEBUG (SecondTask.java:22) - SecondTask runs successfully...
25.02.2012 00:17:28 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:33 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:36 DEBUG (SecondTask.java:22) - SecondTask runs successfully...
25.02.2012 00:17:38 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:43 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:48 DEBUG (SecondTask.java:22) - SecondTask runs successfully...
25.02.2012 00:17:48 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:53 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:58 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:18:00 DEBUG (SecondTask.java:22) - SecondTask runs successfully...

步骤12:下载

OTV_SpringQuartz_MultiJobScheduling

参考: JCG合作伙伴 使用Spring和Quartz进行的多作业计划服务   在线技术愿景博客的Eren Avsarogullari。


翻译自: https://www.javacodegeeks.com/2012/02/spring-and-quartz-multi-job-scheduling.html

spring作业

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react常用知识点总结

1、什么是jsx JSX是JavaScript的扩展语法,这种<></>标签的写法就是 JSX。JSX 编写的组件通过预处理器 babel 解析后,再交给 React 库渲染到指定父容器下,形成最终html页面,供浏览器解析和显示。 JSX会被babel编译为&#xff1a;React.createElement()&#xff0c…

前端导入导出文件

一、导出 1、返回值是url&#xff1a;创建个a标签即可 printRecord(params).then((response) > {if (response.success) {let a document.createElement(a);//创建a标签//从新页面打开&#xff0c;下载的话不需要这个&#xff0c;打开一个图片需要从新页面打开a.setAttrib…

vue进阶

1、vue-cli 使用 在开发中&#xff0c;需要打包的东西不止是js、css、html。还有更多的东西要处理&#xff0c;这些插件和加载器如果我们一一去添加就会比较麻烦&#xff0c;vue官方提供了一个快速搭建vue项目的脚手架&#xff0c;使用它能快速的构建一个web工程模板。 官网&…

Diff 算法核心原理

什么是虚拟DOM 讲Diff算法前&#xff0c;我先给大家讲一讲什么是虚拟DOM吧。这有利于后面大家对Diff算法的理解加深。 虚拟DOM是一个对象&#xff0c;一个什么样的对象呢&#xff1f;一个用来表示真实DOM的对象&#xff0c;要记住这句话。我举个例子&#xff0c;请看以下真实…

python 列表 字典 读写文件:pickle模块的基本使用

建议大家使用cPickle&#xff0c;速度更快&#xff01;&#xff01;&#xff01; python数据持久存储&#xff1a;pickle模块的基本使用&#xff08;转载&#xff09; 作者: pzxbc出处: http://pzxbc.cnblogs.com/本文版权归作者和博客园共有&#xff0c;欢迎转载&#xff0c;但…

first-child、first-of-type等属性的差别

1、xxx:first-child 伪类 xxx作为第一个子元素 //p元素作为第一个子元素的都会变色 p:first-child { background:yellow; } //p作为父元素的 第一个子元素。不要求第一个元素的类型 p>:first-child {background:yellow; }//p作为父元素的 第一个子元素。要求第一个元素的类…

我的Serverless实战——引领云计算的下一个十年

前言&#xff1a;如今&#xff0c;越来越多的大厂企业开始大规模使用Serverless&#xff0c;处于变革中的开发者&#xff0c;大多已从观望状态转向尝试阶段&#xff0c;越来越多Serverless落地场景被解锁。作为基础研发底座&#xff0c;越来越多企业开始接受Serverless&#xf…

各种边距clientWidth、offsetWidth、scrollWidth、clientLeft、getBoundingClientRect详解

1、clientWidth、offsetWidth、scrollWidth <!DOCTYPE html> <html><head><meta charset"utf-8" /><style>#box1 {padding: 50px;position: static;}#box {border: 1px solid red;overflow: scroll;height: 200px;width: 500px;}#con…

花了两天时间用html+css+js做了一个网页版坦克大战游戏

大家好&#xff0c;我是孙叫兽&#xff0c;本期内容给大家分享如何用htmlcssjavaScript去做一个简易网页版坦克游戏。 目录 坦克游戏玩法及介绍 项目结构 源码地址&#xff1a; 坦克游戏玩法及介绍 我们先来看一下首页。 打开这个首页很简单&#xff0c;基本是上面这个样子&…

设置文字多行显示溢出显示省略号

#news_text { border: 1px solid red; width: 200px; word-break: break-all; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; /*这里可以设置文本显示的行数*/ overflow: hidden; }<div id"news_text"&g…

vue项目有几个接口content Download时间特别长的解决办法

做的可视化地图项目&#xff0c;有几个接口加载比较慢&#xff0c;大概16S左右&#xff0c;第一次加载接近一分钟&#xff0c;这谁能受得了。 对比了正式环境和测试环境&#xff0c;这个接口数据量一样&#xff0c;就是在测试服务器比较慢&#xff0c;排除滚动插件及其它的影响…

Jmeter调试工具---HTTP Mirror Server

转自&#xff1a;http://www.cnblogs.com/puresoul/p/4907655.html 一、HTTP Mirror Server的作用&#xff1a; 它可以在本地临时搭建一个HTTP服务器&#xff0c;该服务器把接收到的请求原样返回&#xff0c;这样就可以看到发送出的请求的具体内容&#xff0c;以供调试。 二、…

520 单身福利|女朋友又找我要礼物

大家好&#xff0c;我是孙叫兽&#xff0c;520快到了&#xff0c;给大家分享一下单身福利&#xff01;时间过得真快&#xff0c;一转眼又到了 520&#xff0c;有对象的程序员又激动又扎心的节日&#xff0c;其实吧&#xff0c;程序员对这种节日又期待又焦灼&#xff0c;为什么呢…

pit和systick_PIT和TestNG突变测试简介

pit和systick变异测试是一种技术&#xff0c;它可以发现测试未涵盖代码的哪些部分。 它类似于代码覆盖范围 &#xff0c;但变异测试不限于在测试期间执行给定行的事实。 这个想法是修改生产代码&#xff08;引入突变&#xff09;&#xff0c;这应该改变其行为&#xff08;产生不…

使用vue-seamless-scroll自动滚动插件复制出来的数据点击事件无效的解决办法

引言&#xff1a;做可视化地图项目&#xff0c;使用vue-seamless-scroll实现表格数据自动滚动&#xff0c;有个bug就是复制出来的数据点击事件失效。这个插件底层的实现是cope的形式&#xff0c; 无限滚动原理&#xff1a;无限滚动的原理就是把之前的遍历的内容复制一份&#x…

最短路的几种算法及其优化(模板)

一.Dijkstra 算法 dijkstra算法适用于边权为正的情况&#xff0c;求单源最短路&#xff0c;适用于有向图和无向图 模板伪代码&#xff1a; 清除所有点的标号 设d[0]0&#xff0c;其余d[i]INF&#xff1b; 循环n次{ 在所有未标记的节点中&#xff0c;寻找d[i]最小的点x 给x做标记…

极客青年说,北京沙龙

大家好&#xff0c;我是孙叫兽&#xff0c;本期内容给大家分享infoq写作平台在北京站的沙龙主题。主要流程如下&#xff1a;早上起来&#xff0c;吃了点饭&#xff0c;然后就去北京望京悠乐汇的A1202,这次是个轰趴馆&#xff0c;比较适合年轻的程序员放松。去的稍微早了点&…

vue点击弹窗自动触发点击事件的解决办法

业务场景&#xff1a;使用vue element ui 的el-dialog&#xff0c;点击弹窗之后&#xff0c;默认加载第一个按钮的数据进行初始化。 div 指令&#xff1a; // 自动触发点击事件directives:{trigger:{inserted(el,binging){// console.log("自动触发事件")el.click()}…

vue根据表格字段不同的状态显示不同的颜色。

业务需求:根据后台返回的数据,对表格中的严重等级和问题状态做一下颜色区分。数据很大,大概一年左右的数据,在二级弹窗中,数据滚动的形式。 大家好,我是孙叫兽 不加状态前: 我这个使用vue+div循环的实现,很便捷,使用element ui也是可以的。 然后再computed:{}中添加…

Apache JMeter教程

要负载测试您的Web应用程序吗&#xff1f; 然后&#xff0c;您应该了解Apache JMeter &#xff01; 该JMeter教程介绍了基本概念以及如何创建测试计划以及如何执行它以对应用程序进行基准测试。 这是我在Disy的Tech-Blog上的文章的交叉张贴 -谢谢您让我在公司时间写文章&…