Spring版本:3.2.13.RELEASE
quartz版本:2.2.1
1. 基本配置
(1)配置自己写的任务类
<bean id="testTimer" class="org.linkscholar.biz.timer.TestTimer" />
(2)配置JobDetail
<bean id="testJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="testTimer"/> </property> <property name="targetMethod"> <value>scan</value> </property> </bean>
targetObject指定任务对象,targetMethod指定对象执行方法
(3)配置触发器
<bean id="testCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="testJobDetail" /> </property> <property name="cronExpression"> <value>0 0/1 * * * ?</value> </property> </bean>
这里 0 0/1 * * * ? 表示每一分钟执行一次,关于调用时间的具体配置可以参照
http://jingyan.baidu.com/article/0f5fb099cc244d6d8234ea6b.html
(4)配置总管理类
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false"> <property name="triggers"> <list> <ref local="testCronTrigger" /> </list> </property> </bean>
lazy-init="false"表示容器启动就开始执行调度任务, 这里可以配置多个触发器,可以统一管理
2. 出现的问题
按照上述配置后,写了Junit测试运行,发现出现错误:
(1)
Cannot find class [org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean] for bean with name
这个异常就是上面这个类找不到,开始我到spring-context.jar中去找,虽然有org.springframework.scheduling这个包,但是却没有quartz,后来上网查了好久才知道,上面这个类在spring-contex-support这个包中(以前spring用一个jar,后来分成了多个jar包),引入进来就对了。
(2)
解决了上面的问题后,又出现一个新的错误:
java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class
这是因为版本不兼容引起的,解决的办法是:
1. 降低quartz到1.x版本
2. 根据spring的建议将原来的xxxTriggerBean替换成xxxTriggerFactoryBean,这里就是将配置中的第三步配置触发器类CronTriggerBean换成CronTriggerFactoryBean:
<bean id="testCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail"> <ref bean="testJobDetail" /> </property> <property name="cronExpression"> <value>0 0/1 * * * ?</value> </property> </bean>
(3)
解决了上面两个问题后,发现又有错误:
Table 'database.qrtz_locks' doesn't exist
这个错误看起来匪夷所思。。。
参考:
http://blog.sina.com.cn/s/blog_6151984a0100o42e.html
SchedulerFactoryBean试图访问数据库获取quartz的一些管理表信息,自然访问数据库时需要注入dataSource bean,当缺省autowire为no,则没有dataSource bean被注入,quartz会认为项目没连数据库,会BYPASS这个访问管理表的功能. 当你配置了default-autowire=byName时,dataSource bean被自动注入,这时quartz认为项目既然能连到数据库,就想当然的认为对应的那些表一定存在,没找到时就出异常.
解决办法:
1. 去掉default-autowire=byName(这种方法估计不是很愿意,得损失很多便利)
2. 在数据库中创建相应的数据表(这种需要创建很多表,而且建这些表可能我们暂时也用不到)
3. 在SchedulerFactoryBean这个bean配置中关掉autoware,加入autorware=“no”(这个解决方法好!):
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" autoware="no"> <property name="triggers"> <list> <ref local="testCronTrigger" /> </list> </property> </bean>
相关推荐
3. **调度器配置**:`SchedulerFactoryBean`是Spring对Quartz调度器的包装,它管理所有的触发器和任务。在这里,我们将`cron`触发器添加到调度器中,使得任务与触发器关联起来。 接下来,我们看下服务类和服务的...
通过对这些文件的深入学习和理解,你可以掌握如何在Spring环境中配置和使用Quartz进行任务调度,这对于构建有定时任务需求的应用程序非常有帮助。这个项目提供了实践经验,有助于开发者提升在企业级应用开发中的技能...
Quartz可以集成到Spring中,利用Spring的依赖注入和配置能力,使得任务调度更加简洁和易于维护。 **一、Spring与Quartz的集成** 1. **配置Quartz** 在Spring应用中集成Quartz,首先需要添加Quartz的相关依赖到...
在实际项目中,我们还需要确保正确配置了数据库连接,因为Quartz通常将任务和触发器存储在数据库中。 总的来说,Spring与Quartz的结合使用为开发者提供了强大且灵活的任务调度能力。你可以根据需求设置不同的触发...
里面包含了两个工程项目: 1.Java project工程(含jar包,JDK1.6)。 是spring+quartz的任务调度实例。 2.Java web工程(含jar包,JDK1.7)。 spring+mybatis+quartz任务调度实例
5. **调度作业**:在Spring配置文件中,通过标签定义作业和触发器,并通过SchedulerFactoryBean的addJob和scheduleJob方法将它们关联起来。 6. **动态管理**:在Spring的控制层,你可以使用Scheduler的API来控制...
Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。结合Spring框架,可以方便地在企业级应用中实现复杂的时间触发逻辑。本实例提供了可以直接运行的任务调度解决方案,既...
Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...
Quartz 本身就提供了将任务和触发器持久化到数据库中的功能,这样可以解决上述问题。要使用这种方式,开发者需要安装 Quartz 数据库表,并配置 JobStoreTX。 首先,需要安装 Quartz 数据库表。Quartz 包括了所有被...
使用 `org.springframework.scheduling.quartz.SchedulerFactoryBean` 连接 Quartz Scheduler,并将 Job 和 Trigger 绑定,完成任务的调度。SchedulerFactoryBean 还负责管理 Scheduler 的生命周期,如启动、关闭等...
`SchedulerFactoryBean`是Spring提供的用于创建Quartz调度器的bean,`triggers`属性的列表包含了需要调度的任务触发器。在这里,`startQuertz`会在容器启动时立即执行调度程序。 关于cron表达式的值,我们可以看到...
标签“源码”提示我们,理解Quartz和Spring的集成可能需要查看和分析源代码,这对于深入理解它们如何协同工作以及解决可能出现的问题非常有帮助。标签“工具”则表明这是一个实用的技术方案,可以被开发者用来提升...
通过以上介绍,我们可以看出Spring Quartz是一个功能强大且灵活的任务调度解决方案,适用于各种需要定时任务的应用场景。结合Spring的特性,可以让开发人员更高效地管理和执行定时任务,提高软件的自动化水平。
### Spring中Quartz任务调度器cronexpression配置说明 在现代软件开发中,特别是Java应用程序领域,定时任务的执行是常见的需求之一。Spring框架通过集成Quartz这一强大的任务调度库,为开发者提供了灵活、高效的...
在与Spring框架整合后,Quartz能更好地融入到现有的应用架构中,实现更高效的资源管理和任务调度。 首先,我们要理解Quartz的核心概念。`Job`是Quartz中的基本工作单元,它代表一个要执行的任务。而`Trigger`则定义...
1. **配置数据库Job Store**:Quartz允许将任务和触发器存储在数据库中,而不是内存中。这使得多台服务器可以共享任务信息。在`quartz.properties`配置文件中,设置`org.quartz.jobStore.type`为支持事务的数据库Job...
基于Spring Boot的Quartz任务调度系统 项目概述 本项目是一个基于Spring Boot和Quartz的任务调度系统,旨在提供灵活的任务管理和调度功能。系统支持多种任务类型,包括Cron表达式任务和单次时间任务,并提供了丰富...
在Spring框架中集成Quartz是一款常见的任务调度解决方案,它允许开发者在应用中安排定时任务的执行。Quartz是一个开源的作业调度框架,可以用来在Java应用程序中安排复杂的作业任务。以下将详细介绍如何在Spring中...
在Spring的配置文件(如applicationContext.xml)中,我们需要配置SchedulerFactoryBean来启动Quartz调度器: ```xml <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean...
在Java开发中,Spring框架是不可或缺的一部分,而Quartz则是一个强大的作业调度库,用于创建、调度和执行作业。本文将详细介绍如何在Spring 3中配置Quartz来实现定时任务。 首先,理解定时任务的基本概念。定时任务...