两个quartz访问同一数据库_quartz数据库方式与web工程整合

quartz数据库方式与web工程整合

这两天在项目中有一个任务,需要灵活配置调度任务时间,并能自由启动或停止调度。

有关调度的实现我就想到了quartz这个开源调度组件,自己写这样一个类似的东西感觉还有一定难度,其实主要是自己在线程方面的经验、知识不足,有一种恐惧感,好在有开源的解决方案。

以前在web项目中配置过quartz,比如:每天凌晨几点定时运行一个程序,这只要在工程中的spring配置文件中配置好spring整合quartz的几个属性就好。顺便总结一下:

Xml代码

class="org.springframework.scheduling.quartz.CronTriggerBean">

0 0/5 1 * * ? *

class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

taskTimePoll

class="com.yinbo.entrust.service.impl.JobMethodBean">

class="com.mycompany.entrust.dao.impl.TasktimepollDaoHibernate"

autowire="byName"/>

class="com.mycompany.entrust.service.impl.TasktimepollManagerImpl">

class="org.springframework.scheduling.quartz.CronTriggerBean">

0 0/5 1 * * ? *

class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

taskTimePoll

class="com.yinbo.entrust.service.impl.JobMethodBean">

class="com.mycompany.entrust.dao.impl.TasktimepollDaoHibernate"

autowire="byName" />

class="com.mycompany.entrust.service.impl.TasktimepollManagerImpl">

这种配置就是对quartz的一种简单的使用了,调度任务会在spring启动的时候加载到内存中,按照bjcronTrigger中定义的crontrigger定义的时间按时触发调度任务。但是这是quartz使用“内存”方式的一种配置,也比较常见,当然对于不使用spring的项目,也可以单独整合quartz。方法也比较简单,可以从quartz的doc中找到配置方式,或者看一下《Quartz Job Scheduling Framework 》(附件中可下载)这本书中的例子。

但是对于想持久化调度任务的状态,并且灵活调整调度时间的方式来说,上面的内存方式就不能满足要求了,正如本文开始我遇到的情况,需要采用数据库方式集成quartz,这部分集成其实在《Quartz Job Scheduling Framework 》中也有较为详细的介绍,当然doc文档中也有,但是缺乏和spring集成的实例,我在这里把我在项目中在spring配置quartz数据库存储方式的配置也写一下:

Xml代码

class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

value="applicationContextKey"/>

class="org.springframework.core.io.ClassPathResource">

type="java.lang.String">

class="cn.mycompany.mdms.scheduler.service.SchedulerServiceImpl">

class="cn.mycompany.mdms.monitordir.MonitorDirService">

class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

value="applicationContextKey" />

class="org.springframework.core.io.ClassPathResource">

type="java.lang.String">

class="cn.mycompany.mdms.scheduler.service.SchedulerServiceImpl">

class="cn.mycompany.mdms.monitordir.MonitorDirService">

属性说明:

dataSource:项目中用到的数据源,里面包含了quartz用到的12张数据库表;

schedulerName:调度器名,我理解主要在调度集群的时候会有用,如果出现多个调度器实例的时候可以用来进行区分,详细看一下《Quartz Job Scheduling Framework 》;

configLocation:用于指明quartz的配置文件的位置,如果不用spring配置quartz的话,本身quartz是通过一个配置文件进行配置的,默认名称是quartz.properties,里面配置的参数在quartz的doc文档中都有介绍,可以调整quartz,我在项目中也用这个文件部分的配置了一些属性,代码如下:

Java代码

#============================================================================

# 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

#============================================================================

# 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()进行启动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值