这里使用的是Spring2.5,需要的jar包:spring.jar(spring2.5的完全包);quartz-all-1.6.0.jar;还需commons-*.jar。
方法一:
任务调度工作类代码:
public class Clock extends TimerTask{ @Override public void run() { System.out.println("clock!"); } }
应用上下文XML中的具体配置如下:
<?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-2.0.xsd"> <!-- 第一步 声明一个定时任务,该类extends java.util.TimerTask --> <bean id="clock" class="com.Clock" /> <!-- 第二步 调度定时任务,把声明的定时任务注入进来,并设置定时参数 --> <bean id="scheduledClock" class="org.springframework.scheduling.timer.ScheduledTimerTask"> <property name="timerTask" ref="clock" /> <!--这里是每隔多长时间就进行一次计时任务,单位ms--> <property name="period"> <value>5000</value> </property> <!--这里是服务启动后延时多少时间,开始计时任务,单位ms--> <property name="delay"> <value>5000</value> </property> </bean> <!-- 第三步 启动定时任务,如果有多个定时任务,则重复步骤一,二,然后把第二步设置的beany放在下面的list列表中.此方法不能精确几点运行定时任务 --> <bean class="org.springframework.scheduling.timer.TimerFactoryBean"> <property name="scheduledTimerTasks"> <list> <ref bean="scheduledClock" /> </list> </property> </bean> </beans>
方法二:
任务调度工作类代码:
public class QuartzClock extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { System.out.println("QuartzClock!"); } }
应用上下文XML中的具体配置如下:
<?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-2.0.xsd"> <!-- 第一步 声明一个定时任务,注意不是直接声明,而是声明一个JobDetailBean,通过jobClass属性设置一个定时对象 --> <bean id="quartzClock" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>com.QuartzClock</value> </property> </bean> <!-- 第二步 调度定时任务,把声明的定时任务注入进来,并设置定时参数,配置方式同第一种方法 --> <!-- <bean id="quartzClockTask" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail"> <ref bean="quartzClock" /> </property> <property name="startDelay"> <value>6000</value> </property> <property name="repeatInterval"> <value>6000</value> </property> </bean> --> <!-- 这种配置可以精确几点执行定时任务 --> <bean id="cronQuartzClock" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="quartzClock" /> <property name="cronExpression"> <!-- 0/15 * * * * ? 每15秒钟 --> <value>0/15 * * * * ?</value> </property> </bean> <!--第三步 启动定时任务,注意这里的ref bean --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronQuartzClock" /> </list> </property> </bean> </beans>
方法三:
任务调度工作类代码:
public class TaskServiceImpl{ public void synchronizeDb(){ System.out.println("Quartz的任务调度!"); } }
应用上下文XML中的具体配置如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- 定时任务的工作Bean --> <bean id="quartzJob" class="com.whty.task.service.impl.TaskServiceImpl" /> <!-- 定义生成工作对象的工厂,并为工厂设定目标对象targetObject属性、目标对象的工作方法targetMethod属性 --> <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="quartzJob" /> <property name="targetMethod"> <value>synchronizeDb</value> </property> <property name="concurrent" value="false" /> </bean> <!-- 任务调度计时器,进行定时设置。CronTriggerBean能进行非常精确的定时设置 --> <bean id="cronQuartzClock" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="jobDetail" /> <!-- cron表达式 --> <property name="cronExpression"> <!-- 0 0 */2 * * ? 每两小时、整点触发 --> <!-- 0 0/2 * * * ? 每两分钟 --> <!-- 0/5 * * * * ? 每五秒钟 --> <!-- 0 15 10 * * ? 每天Y分X点触发 --> <value>0/15 * * * * ?</value> </property> </bean> <!-- 调度任务触发器,启动定时任务--> <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronQuartzClock" /> </list> </property> </bean> </beans>
特别说明:
0 0/2 * * * ? 每两分钟
就上面的这个cron表达式,定时任务在第三种配置模式下,表现为以下行为:
定时任务是一个线程在执行,例如线程在09:00:00启动,且完成工作在09:02:00 之前,那么线程健在09:02:00再次启动。如果线程在09:00:00启动,且完成工作在09:02:00之后,那么线程健在完成时间再次启动。
在该配置下,总结规律如下:
1.定时任务将由一个线程启动,而不是多个线程执行。
2.该线程每两分钟启动一次,该时间间隔是线程每次启动的时间差,如果线程执行时间超出了两分钟的设定间隔,那么线程在执行完成后继续执行。
多线线程配置模式下的运行规律大家可以自行测试。
附录:
相关推荐
Spring定时任务包含jar包与代码和多种方式的实现
1.在Spring Boot中,你可以使用@Scheduled注解来创建定时任务。将@Scheduled注解与方法一起使用,指定任务执行的时间表达式。 2.使用Spring的TaskScheduler: Spring提供了TaskScheduler接口和相关实现,用于任务...
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...
智能巡检:设定巡检事项、路线、任务,启动定时任务,责任人即可按指令进行巡检。 智慧大屏幕:可外接智慧大屏 五、核心功能 资产管理、业务管理、费用管理、采购管理、设备管理、智慧服务、保修管理、组织管理、...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack ...19.2. 使用Spring JMS ...
说明:@Scheduled 注解用于标注这个方法是一个定时任务的方法,有多种配置可选。cron支持cron表达式,指定任务在特定时间执行;fixedRate以特定频率执行任务;fixedRateString以string的形式配置执行频率。
多语言执行器实现,计划支持Go或者Rust语言执行器(正在设计与开发中)的接入,满足在资源有限的执行器节点执行,比如物联网场景下面的定时任务执行。支持丰富的任务类型,除了支持普通的Java、脚本任务的执行,也...
本资源提供了一套基于Spring ...这些文件详细展示了如何使用Spring Boot构建一个邮件发送服务,该服务支持文本、附件、模板等多种实现,并具有队列和线程定时任务功能。这些文件非常适合用于学习和参考Java项目的开发。
spring支持多种定时任务的实现。我们来介绍下使用spring的定时器和使用quartz定时器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
后端采用 Spring Cloud Alibaba 微服务架构,注册中心 + 配置中心 Nacos,消息队列 RocketMQ,定时任务 XXL-Job,服务保障 Sentinel,服务网关 Gateway,分布式事务 Seata 数据库可使用 MySQL、Oracle、PostgreSQL...
├ 定时任务 ├ tag自动提取 站点配置 ├ 网站参数配置 ├ 用户注册配置 ├ RSS配置 ├ RSS订阅 ├ TAG管理 ├ 文件上传配置 ├ 模板管理 ├ 自定义模板 ├ 可视化模板编辑 ├ 全文检索 ├ 友情链接管理 ...
1.将定时任务进行集中管理,在指定的机器上执行,如生成定时任务执行的jar上传至指定机器进行执行 2.定时任务还是分由多台机器执行,只是通过调度中心控制定时任务执行。 本系统采用第二种方式,本系统的设计要点...
《灯灯》中后台快速开发平台 灯项目名字由来 叙事版: 在一个夜黑风高的晚上,小孩吵着要出去玩,于是和程序员老婆一起带小孩出去放风,路上顺便讨论起项目要换个什么名字,在各自想出的名字都被对方一一否决后,,...
定时任务:系统支持设置定时任务,用户可以为设备设定特定的开关时间,实现自动化控制。数据监控:系统可以实时收集设备运行数据,为用户提供数据分析和统计功能,帮助用户了解家庭能源消耗情况。安全性能:系统采用...
定时任务: 配置定时任务,使用动态脚本编写任务内容.系统监控: 监控系统资源使用情况.缓存监控: 监控缓存情况.访问日志: 记录用户每次操作情况未来:组织架构管理: 地区-机构-部门-职务-人员.工作流管理: activiti...
引入quartz定时任务,可动态完成任务的添加、修改、删除、暂停、恢复及日志查看等功能 引入API模板,根据token作为登录令牌,极大的方便了APP接口开发 引入Hibernate Validator校验框架,轻松实现后端校验 引入云...