`
javapojo
  • 浏览: 32794 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

spring 中 quartz 与 数据库 db 相关操作会出现的问题

阅读更多
与 数据库 db 相关操作有两种:
1.从DB中读cronExpression
2.Job持久化到数据库
对于1:
Quartz 在Spring中动态设置cronExpression
参考 小刀的blog
http://www.blogjava.net/xiaodaoxiaodao/articles/103437.html 

通过DB加载cronException

一个类是可以的
2个类会出问题

<bean id="test2" class="cn.edu.hust.mes.service.quartz.Test">
<property name="scheduler" ref="schedulerFactoryBean"/> 		
</bean>

<bean id="test" class="Test">
<property name="scheduler" ref="schedulerFactoryBean"/>
</bean>

<bean name="schedulerFactoryBean"
		  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="cronTriggerForPLCRead"/>
				<ref bean="cronTrigger"/>
			</list>
		</property>

		<property name="configLocation" value="classpath:quartz.properties"/>
	</bean>


Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'schedulerFactoryBean': FactoryBean which is currently in creation returned null from getObject

如果写了拦截器的化 还会报这个错 :

Error creating bean with name 'test2': Bean with name 'test2' has been injected into other beans [schedulerJobDetailForPLCRead] in its raw version as part of a circular reference, but has eventually been wrapped (for example as part of auto-proxy creation). This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example.


对于2:
MethodInvokingJobDetailFactoryBean 不能持久化
必须用JobDetailBean 需继承QuartzJobBean  不够pojo
使用MethodInvokingJobDetailFactoryBean的化会报:
org.quartz.JobPersistenceException: Couldn't store job: Unable to serialize JobDataMap for insertion into database because the value of property 'methodInvoker' is not serializable: org.springframework.scheduling.quartz.MethodInvoki ngJobDetailFactoryBean [See nested exception: java.io.NotSerializableException: Unable to serialize JobDataMap for insertion into database because the value of property
API上说了
There's a note in the JavaDoc, I'd presume this might be your problem.
JobDetails created via this FactoryBean are not serializable and thus not suitable for persistent job stores. You need to implement your own Quartz Job as a thin wrapper for each case where you want a persistent job to delegate to a specific service method.
http://www.springframework.org/docs/api/org/springframework/scheduling/quartz/MethodInvokingJobDetailFactoryBean.html
用MethodInvokingJobDetailFactoryBean不可持久化 除非加个thin wrapper
但查不到任何资料
但愿spring后续版本有好的方案 现在还是老老实实的用JobDetailBean吧

另:
不可用于web action action 用了session等作用域...
Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request? If you are actually operating within a web request and still receive this message,your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
分享到:
评论

相关推荐

    spring集成quartz集群配置

    在IT行业中,Spring框架是Java应用开发中的基石,而Quartz则是广泛使用的任务调度库,尤其适用于企业级应用。本文将深入探讨如何在Spring环境中集成Quartz以实现集群配置,以便于在分布式环境中进行高效的任务调度。...

    Springboot整合Quartz实现定时任务数据库动态配置

    在Spring Boot的`pom.xml`文件中,引入Spring Boot的`spring-boot-starter-quartz`和`spring-boot-starter-data-jpa`依赖,同时也要添加MySQL的JDBC驱动依赖,以便与数据库交互。 ```xml &lt;groupId&gt;org.spring...

    spring+quartz定时集群支持

    Spring框架与Quartz库的结合为开发者提供了强大的定时任务管理能力,尤其在集群环境中,如何确保任务的正确性和一致性成为了一个关键问题。本篇将深入探讨"Spring+Quartz定时集群支持"这一主题。 首先,Spring是...

    Spring整合任务调度框架Quartz

    Quartz 本身就提供了将任务和触发器持久化到数据库中的功能,这样可以解决上述问题。要使用这种方式,开发者需要安装 Quartz 数据库表,并配置 JobStoreTX。 首先,需要安装 Quartz 数据库表。Quartz 包括了所有被...

    spring quartz集群配置

    通常使用关系型数据库如MySQL,这里提到的lite_basic_db.sql可能是用于初始化Quartz相关的数据库表结构。Quartz提供了SQL脚本来创建必要的表,如QRTZ_TRIGGERS、QRTZ_JOBS等。 2. **集群节点识别**:每个Quartz集群...

    quartz在Spring中的配置

    ### quartz在Spring中的配置 #### 一、简介与基本配置 Quartz 是一款开源的任务调度框架,被广泛应用于 Java 应用程序中进行任务的定时调度。它支持复杂的触发规则,能够实现高度灵活的任务调度机制。Spring 框架...

    quartz与spring集群Demo

    实例是基于MyEclipse开发的。针对Quartz与Spring做集群的Demo...实例运行依赖Oracle数据库,根据quartz框架包docs/dbTables/目录下的sql脚本文件,创建表结构,修改工程中的Spring数据源配置。 Start.java启动程序。

    quartz-2.2.3-sql.zip

    在实际应用中,Quartz可以与Spring框架集成,通过Spring的依赖注入和配置管理来更方便地管理和调度作业。此外,Quartz支持多种触发器类型,如SimpleTrigger(简单触发器)、CronTrigger(CRON表达式触发器)等,可以...

    Spring整合Quartz

    首先,我们需要在项目中引入Spring和Quartz的相关依赖。如果使用Maven,可以在`pom.xml`文件中添加以下依赖: ```xml &lt;!-- Spring Framework --&gt; &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-context ...

    spring整合quartz

    本文将详细探讨如何在Spring框架中整合Quartz,以及在实际项目中如何利用它们来实现数据源切换,并结合Mybatis和MySQL进行数据库操作。 首先,让我们了解Spring与Quartz的整合基础。Quartz是一个开源的作业调度框架...

    SpringBoot集成Quartz分布式定时任务

    文件`dbTables.zip`可能包含了Quartz在数据库中所需的表结构,运行这些SQL脚本能创建必要的表,用于存储Job和Trigger的信息。 集成Quartz到SpringBoot项目中,不仅可以实现基本的定时任务,还可以通过分布式特性在...

    Spring整合Quartz定时任务并在集群、分布式系统中的应用

    创建Quartz数据库表是实现Quartz集群的第一步。Quartz提供了所有被支持的数据库平台的SQL脚本,可以在&lt;quartz_home&gt;/docs/dbTables目录下找到这些脚本。例如,使用MySQL数据库,可以使用tables_mysql_innodb.sql创建...

    common-quartz.zip

    此外,如果你需要在数据库中存储任务信息,还需要配置Quartz的数据源,并确保相关的表结构已经创建。 总之,SpringBoot与Quartz的整合提供了一种便捷的方式,使得在Java应用中管理定时任务变得简单且灵活。通过适当...

    quartz在集群环境下的最终解决方案

    执行 `quartz-1.8.4/docs/dbTables/tables_oracle.sql` 文件,在 Oracle 9i2 或更高版本的数据库中创建所需的 12 张表。 2. 修改 `quartz.properties` 文件,指定数据库连接信息以及任务存储的配置。 3. 将 `...

    SpringBoot中整合quartz示例代码

    在Spring Boot框架中整合Quartz是一个常见的任务,用于实现应用的定时任务管理。Quartz是一个功能强大的开源作业调度框架,可以灵活地安排和执行任务。本文将深入探讨如何在Spring Boot项目中集成Quartz,并通过示例...

    java多个数据库实现数据同步

    在IT行业中,数据库同步是一个关键话题,特别是在分布式系统和企业级应用中,多个数据库的同步是确保数据一致性、完整性和高可用性的重要手段。本文将深入探讨如何使用Java来实现多个数据库之间的数据同步。 首先,...

    springboot-quartz.zip

    可以在`application.properties`或`application.yml`中设置Quartz的相关属性,如数据库连接、线程池大小等。例如: ```properties # application.properties quartz.job-store-type=jdbc quartz.dataSource....

    quartz实现定制化定时任务-基于springboot.zip

    在Spring Boot中集成Quartz,我们可以方便地创建和管理定时任务,使得应用程序能够按照预设的时间间隔执行特定的操作。这篇内容将深入探讨如何在Spring Boot项目中实现基于Quartz的定制化定时任务。 首先,我们需要...

    【SpringBatch】批处理框架整合配置过程文档.docx

    在开发环境中,IDEA 的 resources 目录下可能没有写入权限,因此数据库连接文件(如 `db.properties` 或 `application.yml` 中的数据源配置)应放在项目根目录下。在打包部署时,这个外部的配置文件会被用于替换...

    基于Spring打造简单高效通用的异步任务处理系统

    在这个系统中,我们将利用Spring框架的功能,如Job调度和线程池封装,以及数据库持久化任务信息,来满足这些需求。 首先,任务DB持久化是系统的基础。这意味着我们需要将待处理的任务信息存储在可靠的数据库中,以...

Global site tag (gtag.js) - Google Analytics