quartz持久化到数据库

问题描述

quartz持久化到数据库

quartz在项目启动时,是不是会根据配置文件自动持久化到数据库,我的配置如下:

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
     <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:properties/quartz.properties" />
    <property name="autoStartup" value="true" />
    <property name="applicationContextSchedulerContextKey" value="applicationContext" />
    <property name="startupDelay" value="20" />
    <property name="overwriteExistingJobs" value="true" />
    <property name="triggers">
        <list>
            <!-- 触发器列表 -->
            <ref bean="helloJobTrigger" />
        </list>
    </property>
</bean>

<bean id="helloJobBean" class="com.maidou.job.HelloJob"/>

<!-- 触发器 -->
<bean id="helloJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="helloJobDetail" />
    <property name="cronExpression" value="0/5 * * * * ?" />
    <!--<property name="group" value="group1"/>-->
    <property name="name" value="helloJobTrigger"/>
    <property name="volatility" value="true"/>
</bean>

<!--<bean id="helloJobDetail"-->
        <!--class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">-->
<bean id="helloJobDetail"
        class="com.maidou.factory.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="helloJobBean" />
    <property name="targetMethod" value="execute" />
    <property name="concurrent" value="false" />
    <property name="durable" value="true"/>
    <property name="volatility" value="true"/>
    <property name="shouldRecover" value="true" />
</bean>

可以连接到数据库,数据库是初始化时建的表,没有添加过数据
在运行时报如下错误:
信息: Loading Quartz config from [class path resource [properties/quartz.properties]]
2016-1-13 16:19:33 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} inited
2016-1-13 16:19:34 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
信息: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@a98ce7e: defining beans [org.springframework.scheduling.quartz.SchedulerFactoryBean#0,helloJobBean,helloJobTrigger,helloJobDetail,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,dataSource]; root of factory hierarchy
2016-1-13 16:19:34 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} closed
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.scheduling.quartz.SchedulerFactoryBean#0' defined in class path resource [spring-quartz.xml]: Invocation of init method failed; nested exception is org.quartz.JobPersistenceException: Couldn't store trigger 'helloJobTrigger' for 'helloJobDetail' job:The job (DEFAULT.helloJobDetail) referenced by the trigger does not exist. [See nested exception: org.quartz.JobPersistenceException: The job (DEFAULT.helloJobDetail) referenced by the trigger does not exist.]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83)
at com.maidou.test.main(test.java:13)
Caused by: org.quartz.JobPersistenceException: Couldn't store trigger 'helloJobTrigger' for 'helloJobDetail' job:The job (DEFAULT.helloJobDetail) referenced by the trigger does not exist. [See nested exception: org.quartz.JobPersistenceException: The job (DEFAULT.helloJobDetail) referenced by the trigger does not exist.]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSupport.java:1270)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$5.execute(JobStoreSupport.java:1176)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$40.execute(JobStoreSupport.java:3716)
at org.quartz.impl.jdbcjobstore.JobStoreCMT.executeInLock(JobStoreCMT.java:242)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInLock(JobStoreSupport.java:3712)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSupport.java:1172)
at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:870)
at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:254)
at org.springframework.scheduling.quartz.SchedulerAccessor.addTriggerToScheduler(SchedulerAccessor.java:356)
at org.springframework.scheduling.quartz.SchedulerAccessor.registerJobsAndTriggers(SchedulerAccessor.java:287)
at org.springframework.scheduling.quartz.SchedulerFactoryBean.afterPropertiesSet(SchedulerFactoryBean.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
... 12 more
Caused by: org.quartz.JobPersistenceException: The job (DEFAULT.helloJobDetail) referenced by the trigger does not exist.
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSupport.java:1231)
... 24 more

但是我在数据库添加qrtz_job_details表添加上job后,但是job_data是持久化数据,没有填,启动没有错,但是job不执行,这样的情况请问各位大神如何解决?

解决方案

http://www.cnblogs.com/nick-huang/p/4861612.html

解决方案二:

quartz持久化
SqlPersistenceService持久化数据库
SqlPersistenceService持久化数据库

时间: 2024-12-27 23:45:07

quartz持久化到数据库的相关文章

activemq-ActiveMQ 持久化到数据库

问题描述 ActiveMQ 持久化到数据库 Topic消息发送成功,并且并没有消费者进行消费,为什么ACTIVEMQ_MSGS 表中没有任何记录?? 解决方案 ActiveMQ 5.6默认持久化为kahadb, 数据默认存储在data/kahadb中. 此信息在conf/activemq.xml中有配置: persistenceAdapter> kahaDB directory="${activemq.base}/data/kahadb"/> persistenceAdap

iOS数据持久化-SQLite数据库使用详解

使用SQLite数据库 创建数据库 创建数据库过程需要3个步骤: 1.使用sqlite3_open函数打开数据库: 2.使用sqlite3_exec函数执行Create Table语句,创建数据库表: 3.使用sqlite3_close函数释放资源. 这个过程中使用了3个SQLite3函数,它们都是纯C语言函数,通过Objective-C去调用C函数当然不是什么问题,但是也要注意Objective-C数据类型与C数据类型兼容性问题. 下面我们使用SQLite技术实现备忘录案例,与属性列表文件实现

Quartz任务调度(3)存储与持久化操作配置详细解析

内存存储RAMJobStore Quartz默认使用RAMJobStore,它的优点是速度.因为所有的 Scheduler 信息都保存在计算机内存中,访问这些数据随着电脑而变快.而无须访问数据库或IO等操作,但它的缺点是将 Job 和 Trigger 信息存储在内存中的.因而我们每次重启程序,Scheduler 的状态,包括 Job 和 Trigger 信息都丢失了. Quartz 的内存 Job 存储的能力是由一个叫做 org.quartz.simple.RAMJobStore 类提供.在我们

Quartz.NET框架AdoJobStore保存job到数据库

Quartz.NET 任务调度的核心元素是 scheduler, trigger 和 job,其中 trigger(用于定义调度时间的元素,即按照什么时间规则去执行任务) 和 job 是任务调度的元数据,scheduler 是实际执行调度的控制器.在Quartz.NET中主要有两种类型的 job:无状态的(stateless)和有状态的(stateful).对于同一个 trigger 来说,有状态的 job 不能被并行执行,只有上一次触发的任务被执行完之后,才能触发下一次执行.无状态任务一般指可

Quartz,企业级的计划/日程安排(job schedule)系统(1)-介绍

什么是job schedule system?    job schedule system是负责在预定义的时间执行或者通知某个应用组件的系统.举个例子来说,比如在每周一早上9:30发送email通知客户最新的业务情况. java.util.Timer和java.util.TimerTask    Timer和TimerTask是可以完成job schedule的两个jdk提供的类,不过这不能称为一个system.Timer和TimerTask是很简单的,不直接支持持久化任务,线程池和类似日历(

请教使用spring整合的quartz的问题

问题描述 我的定时时间是持久化到数据库里的,数据库里的时间一到quartz就是执行,但是spring.xml里面也需要设置一个默认的<value>定时时间,这样两个时间不就冲突了吗?我只想要数据库里的定时时间,spring.xml里的时间可以去掉不写吗?但是写成空启动会报错,请教解决方案,谢谢! 解决方案 解决方案二:为什么不用数据库的定时器解决这个问题?解决方案三:这问题有点麻烦,我给说下思路吧首先要写自己的CronTriggerBean即继承org.springframework.sche

spring学习笔记(26)spring整合Quartz2持久化稳健任务调度

在<Quartz任务调度(3)存储与持久化操作配置详细解析 >一文中,我们通过配置quartz.properties属性文件实现了Quartz的数据库持久化操作.现在整合spring的原理,就是相当于把我们在属性文件中的配置属性整合进SchedulerFactoryBean中,来生成我们的Scheduler类. 这里需要特别注意的是,我们通过Bean配置生成的JobDetail和CronTrigger或SimpleTrigger不能被序列化,因而不能持久化到数据库中,如果想要使用持久化任务调度

Quartz基于Java实现开源调度框架的应用

Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现.该项目于 2009 年被 Terracotta 收购,目前是 Terracotta 旗下的一个项目.读者可以到 http://www.quartz-scheduler.org/站点下载 Quartz 的发布版本及其源代码.笔者在产品开发中使用的是版本 1.8.4,因此本文内容基于该版本.本文不仅介绍如何应用 Quartz 进行开发,也对其内部实现原理作一定讲解. 作为一个优秀的开源调度框架

spring-在使用quartz框架的时候添加CronTrigger的时候无法确定第一次执行的时间

问题描述 在使用quartz框架的时候添加CronTrigger的时候无法确定第一次执行的时间 在使用quartz框架的时候遇到的一个问题,具体如下: 在2013-07-16 10:04:57从页面添加CronTrigger的表达式如下0 0/30 * ? * * * .每隔30分钟执行一次,但是持久化到数据库中的下一次触发事件是 2013-07-16 10:30:00 ,即第一次执行是在26分钟后. 在2013-07-16 10:04:57从页面添加CronTrigger的表达式如下0 0/2