quartz数据库方式与web工程整合
这两天在项目中有一个任务,需要灵活配置调度任务时间,并能自由启动或停止调度。
有关调度的实现我就想到了quartz这个开源调度组件,自己写这样一个类似的东西感觉还有一定难度,其实主要是自己在线程方面的经验、知识不足,有一种恐惧感,好在有开源的解决方案。
以前在web项目中配置过quartz,比如:每天凌晨几点定时运行一个程序,这只要在工程中的spring配置文件中配置好spring整合quartz的几个属性就好。顺便总结一下:
<bean id="sfb" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="bjcronTrigger" />
</list>
</property>
</bean>
<bean id="bjcronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="miJobDetail" />
</property>
<property name="cronExpression">
<value>0 0/5 1 * * ? *</value>
</property>
</bean>
<bean id="miJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="JobMethodBean" />
</property>
<property name="targetMethod">
<value>taskTimePoll</value>
</property>
</bean>
<bean id="JobMethodBean"
class="com.yinbo.entrust.service.impl.JobMethodBean">
<property name="tasktimepollManager">
<ref bean="tasktimepollManager" />
</property>
<property name="workFlowManager">
<ref bean="workFlowManager" />
</property>
</bean>
<!-- 任务定时轮询 -->
<bean id="tasktimepollDao"
class="com.mycompany.entrust.dao.impl.TasktimepollDaoHibernate"
autowire="byName" />
<bean id="tasktimepollManager"
class="com.mycompany.entrust.service.impl.TasktimepollManagerImpl">
<property name="tasktimepollDao" ref="tasktimepollDao" />
</bean>
这种配置就是对quartz的一种简单的使用了,调度任务会在spring启动的时候加载到内存中,按照bjcronTrigger中定义的crontrigger定义的时间按时触发调度任务。但是这是quartz使用“内存”方式的一种配置,也比较常见,当然对于不使用spring的项目,也可以单独整合quartz。方法也比较简单,可以从quartz的doc中找到配置方式,或者看一下《Quartz Job Scheduling Framework 》(附件中可下载)这本书中的例子。
但是对于想持久化调度任务的状态,并且灵活调整调度时间的方式来说,上面的内存方式就不能满足要求了,正如本文开始我遇到的情况,需要采用数据库方式集成quartz,这部分集成其实在《Quartz Job Scheduling Framework 》中也有较为详细的介绍,当然doc文档中也有,但是缺乏和spring集成的实例,我在这里把我在项目中在spring配置quartz数据库存储方式的配置也写一下:
<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="schedulerName" value="Mscheduler" />
<property name="configLocation">
<ref local="configLocationResource" />
</property>
<property name="applicationContextSchedulerContextKey"
value="applicationContextKey" />
<property name="autoStartup" value="false" />
</bean>
<bean id="configLocationResource"
class="org.springframework.core.io.ClassPathResource">
<constructor-arg value="quartz.properties"
type="java.lang.String">
</constructor-arg>
</bean>
<bean id="schedulerService"
class="cn.mycompany.mdms.scheduler.service.SchedulerServiceImpl">
<property name="scheduler">
<ref bean="scheduler" />
</property>
</bean>
<!-- 自动扫描作业服务类 -->
<bean id="monitorDirService"
class="cn.mycompany.mdms.monitordir.MonitorDirService">
<property name="adm">
<ref bean="IMAdapterManager" />
</property>
</bean>
属性说明:
dataSource:项目中用到的数据源,里面包含了quartz用到的12张数据库表;
schedulerName:调度器名,我理解主要在调度集群的时候会有用,如果出现多个调度器实例的时候可以用来进行区分,详细看一下《Quartz Job Scheduling Framework 》;
configLocation:用于指明quartz的配置文件的位置,如果不用spring配置quartz的话,本身quartz是通过一个配置文件进行配置的,默认名称是quartz.properties,里面配置的参数在quartz的doc文档中都有介绍,可以调整quartz,我在项目中也用这个文件部分的配置了一些属性,代码如下:
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
#org.quartz.scheduler.instanceName = Mscheduler
org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore
#============================================================================
#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = true
#org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.maxMisfiresToHandleAtATime=1
#============================================================================
# Configure Datasources
#============================================================================
#org.quartz.dataSource.myDS.driver = com.ibm.db2.jcc.DB2Driver
#org.quartz.dataSource.myDS.URL = jdbc:db2://localhost:50000/db
#org.quartz.dataSource.myDS.user = db2
#org.quartz.dataSource.myDS.password = db2
#org.quartz.dataSource.myDS.maxConnections = 5
#============================================================================
# Configure Plugins
#============================================================================
#org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
#org.quartz.plugin.jobInitializer.fileNames = jobs.xml
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
#org.quartz.plugin.jobInitializer.failOnFileNotFound = true
#org.quartz.plugin.jobInitializer.scanInterval = 10
#org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
比如这里面有关数据源的配置部分我就屏蔽掉了,采用spring注入datasource的方式已经进行了配置;
applicationContextSchedulerContextKey:
是org.springframework.scheduling.quartz.SchedulerFactoryBean这个类中把spring上下文以key/value的方式存放在了quartz的上下文中了,可以用applicationContextSchedulerContextKey所定义的key得到对应的spring上下文;
autoStartup:表示是否调度随工程启动自动启动,如果是false表示不自动启动,则需要调用scheduler.start()进行启动。
分享到:
相关推荐
该文件中可以设置数据库连接、线程池大小、Job存储方式等。例如: ``` org.quartz.scheduler.instanceName = MyScheduler org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz....
4. **Quartz整合到Java Web应用** - **Web容器集成**:在Servlet容器(如Tomcat)中运行Quartz,可以将Quartz配置到web.xml中,启动时自动初始化Scheduler。 - **监控界面**:Quartz提供了一个简单的Web管理界面...
2. **配置Quartz**:在SpringBoot的配置文件`application.properties`或`application.yml`中,我们可以设置Quartz的一些基本属性,如数据库连接、job存储方式(内存或数据库)、线程池大小等。 3. **创建Job类**:...
下面将详细介绍如何将这三个组件与Quartz整合,并将定时任务的配置和状态持久化到数据库,实现动态的增删改查功能。 1. **Spring配置** 在Spring的配置文件中,我们需要引入Quartz的相关依赖。首先,定义一个`...
在"Spring2.5+Quartz定时任务简单例子web工程"中,我们可以看到这两个框架的结合使用,主要目标是实现基于 Web 应用的定时任务管理。以下将详细介绍这个项目中可能涉及的知识点: 1. **Spring 2.5**: - **依赖...
综上所述,"WEB管理的Quartz定时任务"是一个集成了SpringMVC、MyBatis和Quartz的系统,通过Web界面进行任务的管理,利用JDBC和数据库存储任务信息。这样的系统适用于需要定时执行复杂业务逻辑的企业应用。在实际开发...
通过分析和运行这些文件,开发者可以深入理解如何在实际项目中实现SSH2与Quartz的整合,以及如何定义和管理定时任务。这有助于提升对Java Web开发和任务调度的理解,为构建复杂的企业级应用打下坚实基础。
Servlet整合Quartz2是一项在Java Web应用中实现定时任务的重要技术。Quartz2是一个功能强大的开源作业调度框架,它允许开发者在应用程序中安排任务执行,而无需关心具体执行时间的管理。下面将详细介绍如何整合...
在本文中,我们将深入探讨如何将Quartz框架整合到基于Spring Boot的Web项目中。Quartz是一个开源的作业调度框架,允许开发人员安排任务并在指定时间执行。Spring Boot以其简化配置和快速启动特性,已经成为Java Web...
在"多数据库之间同步"的场景下,Quartz可以被用来定期执行数据库同步任务,例如定期将数据从一个数据库复制到另一个数据库,确保数据的一致性。 **多数据源切换** 的实现通常涉及配置多个DataSource实例,每个实例...
通过以上步骤,你就可以成功地将 Quartz 与 MySQL 整合,利用数据库实现任务的持久化存储和管理。这种整合方式不仅提高了系统的稳定性和可扩展性,还提供了更丰富的任务管理功能。在 `quartzTest` 文件中,可能包含...
6. **Web应用整合**:在Servlet容器(如Tomcat)中运行Quartz,需要确保初始化和关闭Scheduler与Web应用生命周期同步。可以使用`ServletContextListener`监听器在Web应用启动时启动Scheduler,在停止时停止。 ```...
- **sql**:可能包含了初始化数据库的脚本,用于创建Quartz相关的表结构和数据。 综上所述,动态QuartzDemo项目演示了如何在SSM框架中集成Quartz,实现动态任务调度,并通过Layer弹窗增强用户交互。对于开发者来说...
Quartz 支持内存存储、关系数据库存储等多种方式。 5. **配置与集成**: - 在Web应用中使用Quartz,通常需要在web.xml中配置ContextLoaderListener和QuartzInitializerServlet。Quartz的配置文件(如quartz....
本文将深入探讨如何在SpringBoot 2.0.1版本中整合Quartz,实现动态定时任务,并结合MyBatis-Plus进行数据操作。 首先,我们要在SpringBoot项目中引入Quartz和MyBatis-Plus的依赖。在`pom.xml`文件中,添加如下依赖...
接下来,我们将详细探讨如何将Quartz与SpringBoot进行整合,以及在这个过程中涉及到的关键知识点。 首先,集成Quartz到SpringBoot项目中,你需要在`pom.xml`文件中添加Quartz和SpringBoot的Starter Web依赖。确保你...
- 创建一个配置类,配置QuartzScheduler,包括数据源、job存储方式(例如内存或数据库)、以及调度器的启动等设置。 - 定义Job类,实现`org.quartz.Job`接口,这是实际执行的任务逻辑。 - 创建Trigger,定义任务...
在提供的压缩包"spring4+hibernate5+quartz2+hdfs.rar"中,可能包含了配置文件、Java源代码、数据库连接设置等,用户只需提供自己的JDBC连接信息,即可快速部署和运行这个整合系统。通过解压并研究这些文件,开发者...
为了方便管理和监控定时任务,可以开发一个Web界面,利用Quartz提供的API查询Job和Trigger信息,支持新增、修改、删除等操作。此外,还可以查看任务执行日志,以便于排查问题。 总结,本Demo旨在通过SSM+Quartz的...