首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

spring配置quartz持久化有关问题

2012-08-03 
求助:spring配置quartz持久化问题我使用spring的quartz进行任务调度,为了保存已经配置的调度任务,因此进行

求助:spring配置quartz持久化问题
我使用spring的quartz进行任务调度,为了保存已经配置的调度任务,因此进行了任务的相关配置,但是发现每次配置的job仍然是在ram里面,并没有持久化到对应的表里面,重新启动后上次配置的任务便消失了。配置如下(由于涉及到保密,路径名称进行了隐藏,*代替):

bean配置:
<bean id="quartzSchedulerFactory" lazy-init="false" class="com.*.scheduling.quartz.SchedulerFactoryBean">
  <property name="configLocation" value="/WEB-INF/modules/*_SysMgr.com/conf/quartz.properties"/>
  <property name="dataSource" ref="database_dataSource"/>
  <property name="autoStartup" value="true"/>
  </bean>
  <bean id="schedulerService" class="com.*.device.customtimer.service.SchedulerServiceImpl">
  <property name="scheduler" ref="quartzSchedulerFactory"/>
  </bean>
  <bean id="cac-sysmgr-dbtask-factory" class="com.*.dbmgr.domain.model.task.DBTaskFactory">
  <property name="schedulerService" ref="schedulerService"/>
  </bean>

datdasource配置:
<bean id="dbproperties"
class="com.×.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:db.properties</value>
</property>
</bean>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="${db.driverClassName}" />
<property name="url"
value="${db.url}:${db.port};databaseName=CAC_DB" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
<property name="initialSize" value="2" />
<property name="maxActive" value="20" />
<property name="maxWait" value="-1" />
<property name="maxIdle" value="10" />
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="30000" />
<property name="logAbandoned" value="true" />
</bean>

<bean id="sessionFactory" class="com.×.orm.zorm.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingLocations">
<list>
<value>classpath:com/×/**/*.hbm.xml</value>
</list>
</property>
<property name="mappingJarLocations">
<list>
<value>WEB-INF/**/CAC_*.jar</value>
</list>
</property>
<property name="zormProperties">
<props>
<prop key="zorm.dialect">
com.×.zorm.dialect.SQLServerDialect
</prop>
<prop key="zorm.show_sql">true</prop>
</props>
</property>
</bean>
quartz配置:
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? 


##===========================================================
## Configure Datasources
##===========================================================

#org.quartz.dataSource.myDS.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
#org.quartz.dataSource.myDS.URL = jdbc:sqlserver://10.86.10.73:1433;DatabaseName=CAC_DB
#org.quartz.dataSource.myDS.user = sa
#org.quartz.dataSource.myDS.password = sa
#org.quartz.dataSource.myDS.maxConnections = 5
#==============================================================  
#Configure Cluster Properties  
#==============================================================
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.jobStore.isClustered = true  
org.quartz.jobStore.clusterCheckinInterval = 20000

#==============================================================  
#Configure ThreadPool  
#============================================================== 
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

求高人解答,帮助知道一下,目前一切运行正常,就是添加的任务无法持久化! 谢谢!


[解决办法]
任何无法添加持久化? 楼主,如果不知道术语的话,直接说,我排程里面有数据库操作,但是没有效果,这样大家更容易清楚点。

quartz 排程任务启动和你后端做什么操作是没有关系的。它只是起到定时调用你的持久化(DB操作)类而已。

去检查你的后端做DB操作的类。只要排程能正常启动,那没有持久化,就不会是排程的原因。
[解决办法]

探讨
感谢youjianbo_han_87,

我是第一次使用这个东西,对很多术语都不太明白。因此用“土话”说。

我参照spring手册,说如果需要持久化,则只需要在SchedulerFactoryBean里面配置对应的datasource,这样quratz会自动执行job的持久化到job_detail表里面,然后任务进入排程,自动等待调度执行,现在的现象是任务已经正常进入排程调度执行,但是这个任务并没有被持久化到job_detail表里,这样在服务器重新启动后,上次配置的任务就不会出现在排程里面,等于没有配置这个job。

我想实现的是每次添加的job会被自动持久化到数据库里面,等下次服务器重启的时候,会自动从数据库里面加载这些任务,这样所有配置的任务都会保存下来!

不知道我说明白了没有?

热点排行