springquartz分布式任务调度可以跑多少个调度任务

触发器中两个重要的触发器;1,SimpleTrigger:可以精确到毫秒,;publicSimpleTrigger(Stri;DatestartTime,//开始时间;DateendTime,//结束时间(控制权高于;intrepeatCount,//重复次数(可能;也可以像SimpleTrigger一样,Cron;Cron表达式被用来配置CronTrigg
触发器中两个重要的触发器 1,SimpleTrigger :可以精确到毫秒,如果需要让任务只在某个时刻执行一次,或者,在某个时刻开始,然后按照某个时间间隔重复执行
例如: public SimpleTrigger(String name,
String group,
Date startTime, //开始时间
Date endTime,
//结束时间(控制权高于重复次数属性)为null
时直到永远
int repeatCount,
//重复次数 (可能是0)
long repeatInterval) //重复间隔(以毫秒为单位) 2,CronTrigger :像日历那样按日程来触发任务。可以指定诸如“每个周五中午”,或者“每个工作日的 9:30”或者“从每个周一、周三、周五的上午 9:00到上午 10:00之间每隔五分钟”这样日程安排来触发。 也可以像SimpleTrigger一样,CronTrigger也有一个startTime以指定日程从什么时候开始,也有一个(可选的)endTime以指定何时日程不再继续. Cron表达式被用来配置CronTrigger实例.Cron表达式是一个由 7个子表达式组成的字 符串。每个子表达式都描述了一个单独的日程细节。这些子表达式用空格分隔,分别表示:秒 分钟
小时 月中的天
年 秒---例如:3/5从第3秒开始每隔5秒触发一次 通配符('*')可以被用来表示域中“每个”可能的值 '?'字符可以用在day-of-month及 day-of-week域中,它用来表示“没有指定值”。 'L'字符可以在 day-of-month及day-of-week中使用,L是last的缩写。如时在day-of-month中L表示的月的最后一天。在day-of-week中,表示\当月的最后的周 XXX\,例如:\或者 \都表示本月的最后一个周五。 '#'表示表示月中的第几个周几。例如:day-of-week 域中的\或者 \表示“月中第三个周五”。
注意:对于单独触发器来说,有些日程需求可能过于复杂而不能用表达式表述,例如: 9:00到10:00之间每隔 5分钟触发一次,下午1:00到 10点每隔 20分钟触发一次。 这个解决方案就是创建两个触发器,两个触发器都运行相同的任务。
CronTrigger 例 1 C 一个简单的每隔 5分钟触发一次的表达式
CronTrigger 例2 C 在每分钟的10秒后每隔5分钟触发一次的表达式(例如. 10:00:10
am, 10:05:10等.)。
CronTrigger 例 3 C 在每个周三和周五的 10:30,11:30,12:30触发的表达式。
CronTrigger 例 4 C 在每个月的 5号, 20号的 8点和 10点之间每隔半个小时触发一次 且不包括 10点,只是 8:30,9:00和 9:30的表达式。
注意,对于单独触发器来说,有些日程需求可能过于复杂而不能用表达式表述,例如: 9:00到10:00之间每隔 5分钟触发一次,下午1:00到 10点每隔 20分钟触发一次。 这个解决方案就是创建两个触发器,两个触发器都运行相同的任务。
CronTrigger +Spring 比如每天晚上11点30分30秒对系统数据进行备份。 1,要写一个job类
.fbi.ln. public class SayFBI {
@Autowired
FeedBackRuleService feedBackRuleS//可以注入service层
public void validCalculateFee() throws Exception {
} } //调用service层的方法对系统数据进行备份
2,注入job类
3,注入任务类及方法。
validCalculateFee
4,在spring中配置时间触发器
5,注入要启动的触发器到总管理类
6,实例化总管理类,启动监听
final Scheduler s = (Scheduler) SpringContextHelper.getContext().getBean(\s.start();//通过这个方法就可以启动监听了 以上配置的文明: 1,先写一个job类sayFBI,sayFBI里面有方法validCalculateFee。 2,注入任务类及方法。 3,注入触发器,并将任务类和时间设置进行注入。 4,最后注入总管理类,当总管理类实例化时执行start()方法启动触发器
SimpleTrigger
+Spring 1,
<bean id=\class=\
<property name=\
com.learnworld.quartz.MessageJob
<property name=\
<entry key=\
This is a message from Spring Quartz configuration!
<bean id=\class=\
<property name=\
<property name=\
<property name=\
<ref local=\
<bean id=\class=\\
<property name=\
<ref local=\
1,为什么触发器没有被触发?
最常见的原因就是没有调用Scheduler.start(), 这个方法告知scheduler开始触发触 发器。
2,关于Quartz任务调试时间间隔与执行时间的问题,如果我在Quartz里设的启动时间为每 2分钟执行一次,但是每次执行的时间却有5分钟,会是什么样的情况呢? 答:如果配置了<property name=\,如果已经在执行,就不会再执行了。 3,注意:一旦通过StdSchedulerFactory.getDefaultScheduler()获得。那么应用将不会结束,除非调用scheduler.shutdown()方法。 4,如果有EndTime 和重复次数,那么EndTime的优先级要高于重复次数 5,Scheduler可以将Trigger绑定到某一JobDetail中,这样当Trigger触发时,对应的Job就被执行,一个Job可以对应多个Trigger,但一个Trigger只能对应一个Job。 6,CronTrigger 总是在给定的时间出发然后计算它下次触发的时 间。如果在给定的日期内没有该时间,则触发器将会被忽略,如 果在给定的日期内该时间发生了两次,它只触发一次。因为是在 第一次触发发生后计算当天下次触发的时间。
动态改变定时时间的方法
public void updateNotificationInterval() {
final Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
final CronTriggerBean trigger =
(CronTriggerBean) scheduler.getTrigger(\, Scheduler.DEFAULT_GROUP);
trigger.getCronExpression();
trigger.setCronExpression(\);
scheduler.rescheduleJob(\, Scheduler.DEFAULT_GROUP, trigger);
} catch (final Exception e) {
三亿文库包含各类专业文献、中学教育、文学作品欣赏、幼儿教育、小学教育、行业资料、18Quartz任务调度说明 CronTrigger + Spring等内容。 
 月日小时 分秒的时间点触发时间,完成事件的调度,就像 windows 中得计划任务一样...org.springframework.scheduling.quartz.CronTriggerBean 的对象,如果我们 可以获取...  Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触 发器和任务进行...―全局配置文件读入 --& &bean id=&propertyConfigurer& class=&org.spring...  org.quartz.CronTrigger 是个类,而在 quartz2.x 系列中 org.quartz.CronTrigg er 变成了接口,从而造成无法用 spring 的方式配置 quartz 的触发器( trigger )。...  触发器: 6 &bean id=&repairCronTrigger& class=&org.springframework.scheduling.quartz.CronTriggerBean&& &property name=&description& value=&检修调度任务Cron...  Quartz任务调度--详细教程_IT/计算机_专业资料。...SimpleTrigger 是最适合的选择;而 CronTrigger 则可以...spring+quartz jdbc 实... 17页 免费
任务调度框架...  class=&org.springframework.scheduling.quartz.CronTriggerBean&& &property name...(&测试任务调度开始...&); ApplicationContext context = new ClassPathXml...  Quartz CronTrigger配置说明_IT/计算机_专业资料。今日推荐 88份文档 2014全国高考状元联手分享状元笔记 衡水中学文科学霸高中数学笔记 清华附中文科学霸高中政治笔记 东...  Spring集成Quartz定时任务框架介绍和Cron表达式详解_计算机软件及应用_IT/计算机_...4、增加调度触发器 &bean id=&cronTrigger& class=&org.springframework....springmvc中实现quartz定时任务(每分钟的第3秒执行任务调度方法) - CSDN博客
springmvc中实现quartz定时任务(每分钟的第3秒执行任务调度方法)
1:实现触发器,最大的问题是jar包的处理(*.jar和sourcecode):
此处,最关键的jar为第二个,名字最长。
maven依赖:
&dependency&
&groupId&org.apache.servicemix.bundles&/groupId&
&artifactId&org.apache.servicemix.bundles.spring-context-support&/artifactId&
&version&4.0.7.RELEASE_2&/version&
&/dependency&
&dependency&
&groupId&org.quartz-scheduler&/groupId&
&artifactId&quartz&/artifactId&
&version&1.8.6&/version&
&/dependency&
2:触发器在web.xml中配置:
&?xml version=&1.0& encoding=&UTF-8&?&
&web-app xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xmlns=&/xml/ns/javaee&
xsi:schemaLocation=&/xml/ns/javaee /xml/ns/javaee/web-app_3_0.xsd&
id=&WebApp_ID& version=&3.0&&
&display-name&webdemo1&/display-name&
&!-- 监听spring上下文容器 --&
&listener&
&listener-class&
org.springframework.web.context.ContextLoaderListener
&/listener-class&
&/listener&
&!-- 加载spring的xml配置文件到spring的上下文容器中 --&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath*:applicationContext-*.xml&/param-value&
&/context-param&
&!-- 配置springmvc DispatcherServlet
&servlet-name&mvc&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&init-param&
&param-name&contextConfigLocation&/param-name&
&param-value&/WEB-INF/springmvc.xml&/param-value&
&/init-param&
&load-on-startup&1&/load-on-startup&
&/servlet&
&!-- 配置DispatcherServlet需要拦截的url --&
&servlet-mapping&
&servlet-name&mvc&/servlet-name&
&url-pattern&*.html&/url-pattern&
&/servlet-mapping&
&welcome-file-list&
&welcome-file&index.html&/welcome-file&
&welcome-file&index.htm&/welcome-file&
&welcome-file&index.jsp&/welcome-file&
&welcome-file&default.html&/welcome-file&
&welcome-file&default.htm&/welcome-file&
&welcome-file&default.jsp&/welcome-file&
&/welcome-file-list&
&/web-app&
3:springmvc的配置:
&?xml version=&1.0& encoding=&UTF-8&?&
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:mvc=&http://www.springframework.org/schema/mvc&
xsi:schemaLocation=&http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd&&
&!-- springmvc配置 --&
&!-- 通过component-scan让spring扫描package下的所有类,让spring的注解生效--&
&context:component-scan base-package=&com.tsxs&&&/context:component-scan&
&!-- 配置springmvc的视图渲染器,让其前缀为:/ 后缀为: .jsp 将视图渲染到 /views/&method返回值&.jsp中 --&
&bean class=&org.springframework.web.servlet.view.InternalResourceViewResolver&&
&property name=&prefix& value=&/WEB-INF/views/&&&/property&
&property name=&suffix& value=&.jsp&&&/property&
4:定时任务配置文件
&?xml version=&1.0& encoding=&UTF-8&?&
&beans xmlns=&http://www.springframework.org/schema/beans&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xsi:schemaLocation=&http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd&
default-autowire=&byName& default-lazy-init=&false&&
&!-- default-autowire=&byName& default-lazy-init=&false&此两个值可以不配置 --&
&description&Quartz Job Setting&/description&
&!-- A.配置调度的任务对应bean的id和自定义class--&
&bean id=&myQuartz& class=&com.tsxs.tools.Quartz& /&
&!-- B.配置调度任务对应的bean的id和执行的方法,作业不并发调度--&
&bean id=&myDetail& class=&org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean&&
&property name=&targetObject& ref=&myQuartz& /&
&property name=&targetMethod& value=&tips& /&
&property name=&concurrent& value=&false& /&
&!-- C.配置调度任务执行的触发的时间--&
&bean id=&myTrigger& class=&org.springframework.scheduling.quartz.CronTriggerBean&&
&property name=&jobDetail& ref=&myDetail& /&
&property name=&cronExpression&&
&!-- 每分钟的第3秒执行任务调度 --&
&value&3 * * * * ?&/value&
&/property&
&!-- D.Quartz的调度工厂,调度工厂只能有一个,多个调度任务在list中添加 --&
&bean class=&org.springframework.scheduling.quartz.SchedulerFactoryBean&&
&property name=&triggers&&
&!-- 所有的调度列表--&
&ref bean=&myTrigger& /&
&!-- &ref bean=&myTrigger1& /&
&ref bean=&myTrigger2& /&
对应的bean配置:id=&myDetail1& 和 id=&myTrigger2& 可以对应的并行多配置-对应执行JavaBean和执行时间(各自触发time)
&/property&
注:时间配置:可以看或者网络搜索“quartz定时配置”
5:定时任务执行JavaBean:
package com.tsxs.
import java.text.SimpleDateF
import java.util.D
import java.util.L
import org.quartz.J
import org.quartz.JobExecutionC
import org.quartz.JobExecutionE
public class Quartz {
// public class Quartz implements Job{
//此处可以不实现Job接口的execute方法
// private D
* 定时任务,执行方法
public void tips(){
String time = new SimpleDateFormat(&MMM d,yyyy KK:mm:ss a&,Locale.ENGLISH).format(System.currentTimeMillis());
System.out.println(&time:&+time);
// @Override
// public void execute(JobExecutionContext context) throws JobExecutionException {
date = context.getFireTime();
6:运行结果:
time:Jun 24,:03 PM
time:Jun 24,:03 PM
time:Jun 24,:03 PM
time:Jun 24,:03 PM
time:Jun 24,:03 PM
①:定时任务执行JavaBean可以不实现Job接口的execute方法
②:在定时任务配置中:设置default-lazy-init=&true&,否则定时任务不触发,如果不明确指明default-lazy-init的&#20540;,默认是false
③:在定时任务配置中:设置default-autowire=&byName&的属性,可能导致后台会报org.springframework.beans.factory.BeanCreationException错误(此时,就不能通过Bean名称自动注入,必须通过明确引用注入)
本文已收录于以下专栏:
相关文章推荐
在Spring中配置Quartz
前面介绍过了Timer在Spring中的实现,今天接前文介绍Quartz在Spring中的配置.
&#160;&#160;&#160;&#160;&#160; 而Quartz类库不但有着上述JDK的Timer类库...
一、使用的jar包就不详细讲解了,下载了Mybatis 和 Spring 的jar包基本上都添加上去了、
一图概括:(这是我使用的ar包,有些不是Mybatis 和 Spring 的 )
spring有对quartz的注解支持。实现定时器的功能
转载地址:/dupang/p/6063734.html今天想单元测试一下spring中的quartz定时任务,job类的大致结构和下面的SpringQtz1...
配置quartz 在spring中需要三个jar包:
quartz-1.6.5.jar、commons-collections-3.2.jar、commons-logging-1.1.jar
1、Scheduler的配置
1.配置文件先添加命名空间
xmlns:task=&http://www.springframework.org/schema/task&
xsi:schemaLocation=&http://www...
综观目前的 Web 应用,多数应用都具备任务调度的功能。本文由浅入深介绍了几种任务调度的&#160;Java&#160;实现方法,包括 Timer,Scheduler,
Quartz 以及 JCron Tab,并对其优...
在最近的工作中,涉及到一个定时任务,由于以前对springMVC使用较少,所以,上网找了一点资料.这个demo感觉挺好,推荐给大家.
使用到的JAR文件:
aopalliance-1.0....
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博客分类:
最近项目中采用spring的quartz调度自动发送邮件业务,应用JobDetailBean实现,在应用过程中发现并发情况下对事务控制做得不够好,看如下代码:
&!-- 定时自动发送邮件的配置 --&
&!-- JobDetailBean方式,任务是无状态的,导致多个线程并发执行,产生业务重复操作,改用下面MethodInvokingJobDetailFactoryBean方式实现 --&
&bean id="autoSendEmailJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean"&
&property name="jobClass"&
&value&cn.xxx.videotrackerlive.service.takedown.quartztimer.AutoTakedownEmailCronTrigger&/value&
&/property&
&property name="jobDataAsMap"&
&entry key="accountService"&
&ref bean="accountService" /&
&entry key="userService"&
&ref bean="userService" /&
&entry key="takedownNoticeService"&
&ref bean="takedownNoticeService" /&
&entry key="autoTakedownSettingService"&
&ref bean="autoTakedownSettingService" /&
&entry key="mailListService"&
&ref bean="mailListService" /&
&entry key="emailTemplateService"&
&ref bean="emailTemplateService" /&
&entry key="matchService"&
&ref bean="matchService" /&
&/property&
google资料发现spring还有一种方式是MethodInvokingJobDetailFactoryBean,通过这个factroyBean包装Quartz任务,这样就不必继承job类去实现了,看如下:
&!--MethodInvokingJobDetailFactoryBean方式,指定concurrent设为false,多个job不会并发运行,默认concurrent为true--&
&bean id="autoSendEmailJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&
&property name="targetObject" ref="autoSendEmailAction"/&
&property name="targetMethod" value="autoSendEmail"/&
&property name="concurrent" value="false"/&
&bean id="autoSendEmailCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"&
&property name="jobDetail" ref="autoSendEmailJobDetail"/&
&property name="cronExpression"&
&value&${cronExpression}&/value&
&/property&
&bean id="autoSendEmailSchedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&
&property name="triggers"&
&ref bean="autoSendEmailCronTrigger"/&
&/property&
&!-- end 定时自动发送邮件的配置 --&
action配置
&bean id="autoSendEmailAction" class="cn.xxx.videotrackerlive.web.struts.takedown.AutoSendEmailAction" init-method="clearSession" &
&property name="accountService" ref="accountService" /&
&property name="userService" ref="userService" /&
&property name="takedownNoticeService" ref="takedownNoticeService" /&
&property name="autoTakedownSettingService" ref="autoTakedownSettingService" /&
&property name="mailListService" ref="mailListService" /&
&property name="emailTemplateService" ref="emailTemplateService" /&
&property name="matchService" ref="matchService" /&
参考资料:
Spring 为创建Quartz 的 Scheduler,Trigger 和 JobDetail提供了便利的FactoryBean类,以便能够在Spring容器中享受注入的好处。此外Spring还提供了一些便利工具类直接将Spring中的Bean包装成合法的任务。概括来说他提供了两方面的支持:&&&&&&&&
&&&&&&&&&&&&& 1.& 为Quartz的重要组建类提供更具Bean风格的扩展类;&&&&&&&&
&&&&&&&&&&&&& 2.& 提供创建Scheduler的BeanFactory类,方便在Spring环境下创建对应的组件对象,并结合Spring容器生命周期进行启动和停止的动作。
&&&&& 让我们来具体研究研究Spring对Quartz的支持,相当好用哦。
创建JobDetail
&&&&&& 用户可以直接使用Quartz的JobDetail在Spring中配置一个JobDetail Bean,但是JobDetail使用带参的构造函数,对于习惯通过属性配制的Spring用户来说存在使用上的不便。为此Spring通过扩展JobDetail提供了一个更具Bean风格的JobDetailBean。
&&& JobDetailBean扩展于Quartz的JobDetail。使用该Bean声明JobDetail时,Bean的名字即是任务的名字,如果没有指定所属组,就使用默认组。除了JobDetail中的属性外,还定义了以下属性:
&&& JobClass:类型为Class,实现Job接口的任务。
&& BeanName:默认为Bean的ID名,通过该属性显式指定Bean名称,它对应任务的名称。
&& JobDateAsMap:类型为Map,为任务所对应的JobDataMap提供值。之所以需要提供这个属性,是因为用户无法在Spring配置文件为JobDataAsMap类型的属性提供信息,所以Spring通过jobDataAsMap设置JobDataMap的值。
& ApplicationContextJobDataKey:用户可以将Spring ApplicationContext的引用保存到JobDataMap中,以便在Job的代码中访问ApplicationContext。为了达到这个目的,用户需要指定一个键,用以在jobDataAsMap中保存& ApplicationContext,如果不设置此键,JobDetailBean就不将ApplicationContext放入到JobDataMap中。
&&&&&&&&& JobListenerNames;类型为String[],指定注册在Scheduler中的JobListeners名称,以便让这些监听器对本任务的事件进行监听。
下面配置片断使用JobDetailBean在Spring中配置一个JobDetail:
&bean name=”jobDetail” class=”org.springframework.schedling.quartz.jobDetaliBean”&
&property name=”jobClass”value=”com.test.Myjob”/&
&property name=”jobDataAsMap”&
&entry key=”size” value=”10”/&
&/property&
&property name=”applicationContextJobDataKey”value=”applicationContext”/&
JobDetailBean封装了MyJob任务类,并为Job对应JobDataMap设置了一个size的数据。此外,通过指定 applicationContextDataKey让Job的JobDataMap持有Spring ApplicationContext的引用。
&&&& 同样的,Spring提供了一个MethodInvokingJobDetailFactoryBean,通过这个FactoryBean可以将Spring容器中Bean的方法包装成Quartz任务,这样开发者就不必为Job创建对应的类。而且定义起来想当方便
通常情况下,任务都定义在一个业务类方法中。这时,为了满足Quartz Job接口的规定,还需要定义一个引用业务类方法的实现类。为了避免创建这个只包含一行调用代码的Job实现类,Spring为我们提供了MethodInvokingJobDetailFactoryBean,借由该FactoryBean,我们可以将一个Bean的某种方法封装成满足Quartz 要求的Job。来看一个具体的例子:
&bean id="jobDetail_1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&
&property name="targetObject" ref="myService"&
&property name="targetMethod" value="doJob"&
&property name="concurrent" value="false"&
&bean id="myService" class="com.test.myService" /&
&&&&&&&&&& jobDetail_1将MyService#doJob()封装成一个任务,同时通过concurrent属性指定任务的类型,默认情况下封装为无状态的任务,如果希望目标封装为有状态的任务,仅需要将concurreng设置成false就可以了。
& Spring通过名为concurrent的属性指定任务的类型,能够更直接地描述任务执行的方式(有状态的任务不能并发执行,无状态的任务可并发执行)
public class MyService(){
public void doJob(){
System.out.println("doJobing.....");
& doJob()方法即可以是static,也可以是非static的,但不能拥有方法入参。通过MethodInvokingJobDetailFactoryBean产生的JobDetail不能被序列化,所以不能不持久化到数据库中,如果希望使用持久化任务,用户只能创建正规的Quartz的Job实现了。
浏览: 38014 次
来自: 杭州
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'鍗氬?鍒嗙被锛

我要回帖

更多关于 quartz任务调度器详解 的文章

 

随机推荐