Spring定时任务配置

合集下载

Spring注解配置定时任务task:annotation-driven

Spring注解配置定时任务task:annotation-driven
@Component @Lazy(value=false) public class MyQuartzs {
@Scheduled(cron = "*/5 * * * * ?")//每隔5秒执行一次 public void test() throws Exception {
System.out.println("Test is working......"); }
网络错误421Spring注解配置定时任务task:annotation-driven /article/details?id=50945311
首先在配置文件头部的必须要有: xmlns:task="/schema/task" 1 其次xsi:schemaLocation必须为其添加: /schema/task /schema/task/spring-task.xsd 1 2 然后spring扫描过程必须涵盖定时任务类所在的目录: <context:component-scan base-package="com.xx.xx" /> 1 com.xx.xx属于定时任务类的父级甚至更高级 然后设置动作启用定时任务 <task:annotation-driven/> 1 最后设置任务类 import zy; import org.springframework.scheduling.annotation.Scheduled; import ponent;
//@Scheduled(cron = "0 0 1 * * ?")//每天凌晨1点整 //@Scheduled(cron = "0 30 0 * * ?")//每天凌晨0点30分 //@Scheduled(cron = "0 */60 * * * ?")//1小时处理一次 }

Spring配置定时器(注解+xml)方式—整理

Spring配置定时器(注解+xml)方式—整理

Spring配置定时器(注解+xml)⽅式—整理⼀、注解⽅式1. 在Spring的配置⽂件ApplicationContext.xml,⾸先添加命名空间1 xmlns:task="/schema/task"2 /schema/task3 /schema /task/springtask3.1.xsd42. 最后是我们的task任务扫描注解1<task:annotation-driven/>3. spring扫描位置1<context:annotation-config/>2<context:component-scan base-package="com.test"/>4.写⾃⼰的定时任务1 @Component //import ponent;2public class MyTestServiceImpl implements IMyTestService {3 @Scheduled(cron="0/5 * * * * ? ") //每5秒执⾏⼀次4public void myTest(){5 System.out.println("进⼊测试");6 }7 }♦注意:定时器的任务⽅法不能有返回值(如果有返回值,spring初始化的时候会告诉你有个错误、需要设定⼀个proxytargetclass的某个值为true)⼆、XML⽅式1.在spring配置⽂件中创建bean,创建schedule1<bean id="schedule"class="org.springframework.scheduling.quartz.SchedulerFactoryBean">3<property name="triggers">4<list>5<ref bean="testTrigger"/>6</list>7</property>8</bean>2. 在spring配置⽂件中创建bean,创建你的triggers1<bean id="testTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">3<property name="jobDetail" ref="testJobDetail"/>4<property name="cronExpression" value="0 1/5 * * * ?"/>5</bean>3. 在spring配置⽂件中创建bean,指定定时器作⽤在那个类那个⽅法上⾯1<bean id="testJobDetail"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">3<property name="targetObject" ref="targetTestService"/>4<property name="targetMethod" value="timerTest"/>5</bean>♦注明:把定时器作⽤在targetTestService对象中的timerTest⽅法上⾯4. 当然还得把你作⽤的对象交Spring来管理,所以在spring配置⽂件中创建作⽤类的 bean1<bean id="targetTestService" class=".service.TargetTestService" scope="prototype"></bean>♦这是时间的设置规则org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运⾏时间,只需要设置其cronExpression属性。

Spring提供的三种定时任务机制及其比较

Spring提供的三种定时任务机制及其比较

Spring提供的三种定时任务机制及其比较定时任务的需求在众多应用系统中广泛存在,在Spring中,我们可以使用三种不同的定时机制,下面一一描述并加以比较1. 基于Quartz的定时机制下面详细解释这个类图中涉及的关键类及其使用场景1.1. SchedulerFactoryBean这是Spring中基于Quartz的定时机制入口,只要Spring容器装载了这个类,Quartz定时机制就会启动,并加载定义在这个类中的所有triggerSpring配置范例:[xhtml]view plaincopy1.<bean id="sfb"class="org.springframework.scheduling.quartz.SchedulerFactoryBean">2.<!-- 添加触发器 -->3.<property name="triggers">4.<list>5.<ref local="appSubscTrigger"/>6.</list>7.</property>8.9.<!-- 添加listener -->10.<property name="globalTriggerListeners">11.<list>12.<ref local="myTaskTriggerListener"/>13.</list>14.</property>15.</bean>1.2. CronTriggerBean实现了Trigger接口,基于Cron表达式的触发器这种触发器的好处是表达式与linux下的crontab一致,能够满足非常复杂的定时需求,也容易配置Spring配置范例:[xhtml]view plaincopy1.<bean id="notifyTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">2.<property name="jobDetail"ref="notifyJobDetail"/>3.<property name="cronExpression"value="${notify_trigger_cron_expression}"/>4.</bean>1.3. SimpleTriggerBean该类也实现了Trigger接口,基于配置的定时调度这个触发器的优点在于很容易配置一个简单的定时调度策略Spring配置范例:[xhtml]view plaincopy1.<bean id="simpleReportTrigger"class="org.springframework.scheduling.quartz.SimpleTriggerBean">2.<property name="jobDetail">3.<ref bean="reportJob"/>4.</property>5.<property name="startDelay">6.<value>3600000</value>7.</property>8.<property name="repeatInterval">9.<value>86400000</value>10.</property>11.</bean>1.4. JobDetailBeanJobDetail类的简单扩展,能够包装一个继承自QuartzJobBean的普通Bean,使之成为定时运行的Job缺点是包装的Bean必须继承自一个指定的类,通用性不强,对普通Job的侵入性过强,不推荐使用1.5. MethodInvokingJobDetailFactoryBeanSpring提供的一个不错的JobDetail包装工具,能够包装任何bean,并执行类中指定的任何stati或非static的方法,避免强制要求bean去实现某接口或继承某基础类Spring配置范例:[xhtml]view plaincopy1.<bean id="notifyJobDetail"parent="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">2.<property name="targetObject"ref="notifyServerHandler"/>3.<property name="targetMethod"value="execute"/>4.</bean>1.6. 关于TriggerListener和JobListenerQuartz中提供了类似WebWork的拦截器的功能,系统执行任务前或任务执行完毕后,都会检查是否有对应的Listener需要被执行,这种AOP的思想为我们带来了灵活的业务需求实现方式。

如何在spring中配置定时任务(job)-zxs9999的专栏-CSDN博客

如何在spring中配置定时任务(job)-zxs9999的专栏-CSDN博客

如何在spring中配置定时任务(job)-zxs9999的专栏-CSDN博客如何在spring中配置定时任务(job) 收藏一、在web.xml文件中进行如下配置:<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/applicationContext-*.xml</param-value></context-param>那么需要在工程下创建一个以applicationContext- 为开头的xml 文件eg:applicationContext-jobconfig.xmlxml的头和结尾部分跟其他spring配置文件相似,就不赘述,正文如下:<bean id="youJobName(类别名)" class="com.******.YourJobClassLocation(类的定位)" /> <bean id="doYourJob(别名)" class="org.springframework.scheduling.quartz.MethodInvoking JobDetailFactoryBean"><property name="targetObject"><ref bean="youJobName(类别名)""/></property><property name="targetMethod"><value>runMethodName(定时执行的方法名)</value></property></bean><bean id="youJobNameTrigger(触发器别名)" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail"><ref bean="doYourJob(别名)""/></property><property name="cronExpression"><value>0 0/20 * * * ?(定时的时间配置)</value></property></bean><bean id="doScheduler" class="org.springframework.scheduling.quartz.SchedulerFactory Bean"><property name="triggers"><list><ref local="youJobNameTrigger(触发器别名)"/></list></property></bean>这样的配置几本就可以运转了,但是有一个地方可能是你需要根据你的需求来确定的,那就是触发时间。

spring cron配置定时任务

spring cron配置定时任务

定时任务配置说明第一步:Spring-context.xml中配置<beans xmlns="/schema/beans"......xmlns:task="/schema/task"xsi:schemaLocation="....../schema/task/schema/task/spring-task-3.0.xsd"><task:executor id="executor" pool-size="5" /><task:scheduler id="scheduler" pool-size="5" /><task:annotation-driven executor="executor" scheduler="scheduler" />第二步:类名上面加@Service@Lazy(false)如图:第三步:方法名前加@Scheduled(cron = "0/5 * * * * ?")时间设置:// */5 * * * * ? 每隔5秒执行一次// 0 */1 * * * ? 每隔1分钟执行一次// 0 0 5-15 * * ? 每天5-15点整点触发// 0 0/3 * * * ? 每三分钟触发一次// 0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发// 0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发// 0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发// 0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时// 0 0 10,14,16 * * ? 每天上午10点,下午2点,4点//// 0 0 12 ? * WED 表示每个星期三中午12点// 0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点// 0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发// 0 15 10 ? * MON-FRI 周一至周五的上午10:15触发// 0 0 23 L * ? 每月最后一天23点执行一次// 0 15 10 L * ? 每月最后一日的上午10:15触发// 0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发// 0 15 10 * * ? 2005 2005年的每天上午10:15触发// 0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发// 0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发////// "30 * * * * ?" 每半分钟触发任务// "30 10 * * * ?" 每小时的10分30秒触发任务// "30 10 1 * * ?" 每天1点10分30秒触发任务// "30 10 1 20 * ?" 每月20号1点10分30秒触发任务// "30 10 1 20 10 ? *" 每年10月20号1点10分30秒触发任务// "30 10 1 20 10 ? 2011" 2011年10月20号1点10分30秒触发任务// "30 10 1 ? 10 * 2011" 2011年10月每天1点10分30秒触发任务// "30 10 1 ? 10 SUN 2011" 2011年10月每周日1点10分30秒触发任务// "15,30,45 * * * * ?" 每15秒,30秒,45秒时触发任务// "15-45 * * * * ?" 15到45秒内,每秒都触发任务// "15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次// "15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次// "0 0/3 * * * ?" 每小时的第0分0秒开始,每三分钟触发一次// "0 15 10 ? * MON-FRI" 星期一到星期五的10点15分0秒触发任务// "0 15 10 L * ?" 每个月最后一天的10点15分0秒触发任务// "0 15 10 LW * ?" 每个月最后一个工作日的10点15分0秒触发任务// "0 15 10 ? * 5L" 每个月最后一个星期四的10点15分0秒触发任务// "0 15 10 ? * 5#3" 每个月第三周的星期四的10点15分0秒触发任务。

Spring中的线程池和定时任务功能

Spring中的线程池和定时任务功能

Spring中的线程池和定时任务功能1.功能介绍Spring框架提供了线程池和定时任务执⾏的抽象接⼝:TaskExecutor和TaskScheduler来⽀持异步执⾏任务和定时执⾏任务功能。

同时使⽤框架⾃⼰定义的抽象接⼝来屏蔽掉底层JDK版本间以及Java EE中的线程池和定时任务处理的差异。

另外Spring还⽀持集成JDK内部的定时器Timer和Quartz Scheduler框架。

2.线程池的抽象:TaskExecutorTaskExecutor涉及到的相关类图如下:TaskExecutor接⼝源代码如下所⽰:public interface TaskExecutor extends Executor {/*** Execute the given {@code task}.* <p>The call might return immediately if the implementation uses* an asynchronous execution strategy, or might block in the case* of synchronous execution.* @param task the {@code Runnable} to execute (never {@code null})* @throws TaskRejectedException if the given task was not accepted*/@Overridevoid execute(Runnable task);}此接⼝和Executor⼏乎完全⼀样,只定义了⼀个接收Runnable参数的⽅法,据Spring官⽅介绍此接⼝最初是为了在其他组建中使⽤线程时,将JKD抽离出来⽽设计的。

在Spring的⼀些其他组件中⽐如ApplicationEventMulticaster,Quartz都是使⽤TaskExecutor来作为线程池的抽象的。

spring定时任务(@Scheduled注解)

spring定时任务(@Scheduled注解)

spring定时任务(@Scheduled注解)(⼀)在xml⾥加⼊task的命名空间1. xmlns:task="/schema/task"2. /schema/task /schema/task/spring-task-4.1.xsd(⼆)启⽤注解驱动的定时任务<task:annotation-driven scheduler="scheduler" executor="executor" proxy-target-class="true"/>(三)配置定时任务的线程池<task:executor id="executor" pool-size="10"/> <task:scheduler id="scheduler" pool-size="10"/>(四)写我们的定时任务<!-- 计划任务配置,⽤ @Service @Lazy(false)标注类,⽤@Scheduled(cron = "0 0 2 * * ?")标注⽅法 -->Cron Expressionscron的表达式被⽤来配置CronTrigger实例。

cron的表达式是字符串,实际上是由七⼦表达式,描述个别细节的时间表。

这些⼦表达式是分开的空⽩,代表:1. 1. Seconds2. 2. Minutes3. 3. Hours4. 4. Day-of-Month5. 5. Month6. 6. Day-of-Week7. 7. Year (可选字段)例 "0 0 12 ? * WED" 在每星期三下午12:00 执⾏,个别⼦表达式可以包含范围, 例如,在前⾯的例⼦⾥("WED")可以替换成 "MON-FRI", "MON, WED, FRI"甚⾄"MON-WED,SAT".“*” 代表整个时间段.每⼀个字段都有⼀套可以指定有效值,如Seconds (秒) :可以⽤数字0-59 表⽰,Minutes(分) :可以⽤数字0-59 表⽰,Hours(时) :可以⽤数字0-23表⽰,Day-of-Month(天) :可以⽤数字1-31 中的任⼀⼀个值,但要注意⼀些特别的⽉份Month(⽉) :可以⽤0-11 或⽤字符串 “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC” 表⽰Day-of-Week(每周):可以⽤数字1-7表⽰(1 =星期⽇)或⽤字符⼝串“SUN, MON, TUE, WED, THU, FRI and SAT”表⽰“/”:为特别单位,表⽰为“每”如“0/15”表⽰每隔15分钟执⾏⼀次,“0”表⽰为从“0”分开始, “3/20”表⽰表⽰每隔20分钟执⾏⼀次,“3”表⽰从第3分钟开始执⾏“?”:表⽰每⽉的某⼀天,或第周的某⼀天“L”:⽤于每⽉,或每周,表⽰为每⽉的最后⼀天,或每个⽉的最后星期⼏如“6L”表⽰“每⽉的最后⼀个星期五”“W”:表⽰为最近⼯作⽇,如“15W”放在每⽉(day-of-month)字段上表⽰为“到本⽉15⽇最近的⼯作⽇”““#”:是⽤来指定“的”每⽉第n个⼯作⽇,例在每周(day-of-week)这个字段中内容为"6#3" or "FRI#3" 则表⽰“每⽉第三个星期五”1)Cron表达式的格式:秒分时⽇⽉周年(可选)。

spring定时器的说明

spring定时器的说明
<!-- 注入 用户自定义的 任务-->
<property name="jobClass" value="com.zb.job.PlanJob"/>
<!-- 注入参数 -->
<property name="jobDataAsMap"&;entry key="planService" value-ref="planService"></entry>
<entry key="name" value="王二"></entry>
</map>
</property>
</bean>
7.注入触发器
第一种: 间隔时间发生事情
<bean id="mytrig" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<!-- 间隔时间 -->
<property name="repeatInterval" value="3000"></property>
</bean>
第二种 : 每天的某个时间发生
<bean id="mytrig" class="org.springframework.scheduling.quartz.CronTriggerBean">
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Spring框架中的定时器如何使用和配置1.包∙spring-2.0.6.jar Spring框架的核心包∙jta.jar 会用到包中的usertransaction,具体什么用此处暂时不论∙quartz-1.6.0.jar 会用到CronTrigger这个类,通过表达式实现精确的定时∙commons-logging-1.1.1.jar 日志管理包∙commons-collections-3.2.1.jar 集合工具包2.首先是配置你要定时加载的目标类第一种方法:xml方式,例如:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-3.0.xsd"> <bean id="smsSendService" class="com.timer.smsSendService"/><beans>第二种方法:基于注解的方式。

例如:@Service(smsSendService) 注:此注解用于Service层3.配置你的定时器详情<bean id="smsSendServiceJob"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailF actoryBean"p:targetObject-ref="smsSendService"p:targetMethod="autoSmsTime" p:concurrent="false"/>解释:p:targetObject-ref:指向你要定时加载的目标类。

p:targetMethod:指向定时加载目标类中需要执行的方法。

即定时执行smsSendService类的autoSmsTime()方法。

p:concurrent="false":表示不并发操作。

对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job 就开始了。

指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。

注意:smsSendService类的autoSmsTime()方法没有参数,如果smsSendService有两个方法autoSmsTime()和autoSmsTime(String argument),则spring只会去执行无参的autoSmsTime().例如:123public void autoSmsTime(){System.out.println("无参......");}4.配置定时器时间间隔<!-- 定义时间间隔触发器每隔10秒执行一次--><bean id="smsSendServiceTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean"p:jobDetail-ref="smsSendServiceJob"p:cronExpression="*/10 * * * * ?"/>解释:p:cronExpression:指定定时器什么时候触发。

上面是每10秒触发一次。

详细参考下面附表。

5.配置启动定时器<bean id="schedulerFactoryBean"class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="applicationContextSchedulerContextKey"value="applicationContext"/><property name="triggers"><list><ref bean="smsSendServiceTrigger"/></list></property></bean>解释:triggers:通过再添加其他的ref元素可在list中放置多个触发器。

6.在web中配置配置文件地址和类加载监听器<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener </listener-class></listener>解释:ContextLoader可以由ContextLoaderListener和ContextLoaderServlet生成。

如果查看ContextLoaderServlet的API,可以看到它也关联了ContextLoader这个类而且它实现了HttpServlet这个接口。

ContextLoader创建的是XmlWebApplicationContext这样一个类,它实现的接口是WebApplicationContext->ConfigurableWebApplicationContext->ApplicationContext->BeanFactory 这样一来spring中的所有bean都由这个类来创建讲如何部署applicationContext的xml文件。

如果在web.xml中不写任何参数配置信息,默认的路径是/WEB-INF/applicationContext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml;如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/applicationContext-*.xml</param-value></context-param>在<param-value> </param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并一“,”号分隔。

上面的applicationContext-*.xml采用通配符,比如这那个目录下有applicationContext-ibatis- base.xml,applicationContext-action.xml,applicationContext-ibatis-dao.xml 等文件,都会一同被载入。

由此可见applicationContext.xml的文件位置就可以有两种默认实现:第一种:直接将之放到/WEB-INF下,之在web.xml中声明一个listener;第二种:将之放到classpath下,但是此时要在web.xml中加入<context-param>,用它来指明你的applicationContext.xml的位置以供web容器来加载。

按照Struts2 整合spring的官方给出的档案,写成:<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext-*.xml,classpath*:application Context-*.xml</param-value></context-param>附表:"0 0 12 * * ?" 每天中午12点触发"0 15 10 ? * *" 每天上午10:15触发"0 15 10 * * ?" 每天上午10:15触发"0 15 10 * * ? *" 每天上午10:15触发"0 15 10 * * ? 2005" 2005年的每天上午10:15触发"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发"0 15 10 15 * ?" 每月15日上午10:15触发"0 15 10 L * ?" 每月最后一日的上午10:15触发"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发每隔5秒执行一次:*/5 * * * * ?每隔1分钟执行一次:0 */1 * * * ?每天23点执行一次:0 0 23 * * ?每天凌晨1点执行一次:0 0 1 * * ?每月1号凌晨1点执行一次:0 0 1 1 * ?每月最后一天23点执行一次:0 0 23 L * ?每周星期天凌晨1点实行一次:0 0 1 ? * L标签: spring。

相关文档
最新文档