`
wanxiaotao12
  • 浏览: 476519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring中集成Quartz时遭遇Failure obtaining db row lock异常

 
阅读更多

今天在一个新的项目中用Spring集成Quartz来进行任务调度,和以往一样,配置好JobDetail、Trigger、SchedulerFactoryBean启动,却遭遇到如下异常信息:

  1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sfb' defined in URL [jar:file:/.../xxx-biz-service.jar!/bean/spring-task.xml]: Invocation of init method failed; nested exception is org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: ORA-00942: table or view does not exist
  2. [See nested exception: java.sql.SQLException: ORA-00942: table or view does not exist
  3. ]]
  4. Caused by:
  5. org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: ORA-00942: table or view does not exist
  6. [See nested exception: java.sql.SQLException: ORA-00942: table or view does not exist
  7. ]]
  8. at org.quartz.impl.jdbcjobstore.JobStoreSupport.initialize(JobStoreSupport.java:493)
  9. at org.quartz.impl.jdbcjobstore.JobStoreCMT.initialize(JobStoreCMT.java:144)
  10. at org.springframework.scheduling.quartz.LocalDataSourceJobStore.initialize(LocalDataSourceJobStore.java:133)
  11. at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1010)
  12. at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1152)
  13. at org.springframework.scheduling.quartz.SchedulerFactoryBean.createScheduler(SchedulerFactoryBean.java:668)
  14. at org.springframework.scheduling.quartz.SchedulerFactoryBean.afterPropertiesSet(SchedulerFactoryBean.java:568)
  15. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1057)
  16. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1024)
  17. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:421)
  18. at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
  19. at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:140)
  20. at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
  21. at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)
  22. at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:270)
  23. at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:346)
  24. at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:92)
  25. at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:77)

 

这是一个很奇怪的错误,从打印的异常信息可以看出:quartz试图将任务执行情况持久化到数据库中,一般是在集群环境中使用的一种同步任务的方法,保证某一时刻集群中只有一台机器执行定时任务。
但是,令我奇怪的是,第一,我没有配置quartz的数据源信息;第二,我也没有配置quartz的cluster,quartz应该是在内存中维护任务列表才对。因为我们根本就没有自定义quartz.properties

从日志上看,这的确是Quartz抛出来的异常,而且就是SchedulerFactoryBean.createScheduler时出现了问题;直接查看SchedulerFactoryBean的源码,惊奇的发现了dataSource这个属性!!而且在setDataSource方法注释里面说明了该属性将覆盖quartz.properties文件配置的datasource;看到这个属性就一切都明了了,原来又是Spring的自动注入惹的祸!前段时间刚刚遭遇过同类事件,具体可参见《网店版重生系列:都是Spring配置中自动注入惹的祸》;

一般情况下我们数据源的beanId都是dataSource,所以在Spring自动注入的情况下,Spring再一次自作聪明了一把!解决办法有二:其一,取消quartz任务相关配置所在bean的自动注入,注意:无需将所有Spring配置文件中的自动注入都去西欧啊;其二:将系统数据源datasource这个beanId进行改名;

 

转自:http://blog.csdn.net/sfdev/article/details/4360011

分享到:
评论

相关推荐

    spring2与quartz在Web整合

    4. **Web 应用集成**:在 Web 应用中,通常会将 Quartz 的 Scheduler 初始化为一个 ServletContextListener,这样在 Web 应用启动时就会自动启动 Scheduler。同时,为了确保在应用关闭时能够停止所有调度,也需要在 ...

    spring集成quartz集群配置

    本文将深入探讨如何在Spring环境中集成Quartz以实现集群配置,以便于在分布式环境中进行高效的任务调度。 首先,理解Spring集成Quartz的核心在于Spring的Job接口和Quartz的Scheduler。Spring提供了`org.spring...

    最新 Spring 4.2.2 集成 Quartz Scheduler 2.2.2 任务调度示例

    本资源是一个最新 Spring 4.2.2 集成 Quartz Scheduler 2.2.2 的一个简单的 demo,也是博客《最新 Spring 4.2.2 集成 Quartz Scheduler 2.2.2 任务调度示例》的配套示例项目,该博客地址是:...

    spring boot集成quartz定时器

    本文将详细讲解如何在Spring Boot项目中集成Quartz定时器,以及如何利用Spring的依赖注入特性来实现Job。 一、集成Quartz定时器 1. 添加依赖:首先,你需要在Spring Boot项目的`pom.xml`或`build.gradle`文件中...

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    Spring 中的 Quartz 配置-Spring 定时器-java 定时器 在 Spring 框架中,Quartz 是一个非常流行的开源作业调度器,可以实现任务的定时执行。在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java ...

    spring4.0.3集成quartz支持的扩展jar包

    spring集成quartz支持的扩展jar包,spring版本4.0.3

    Spring4集成quartz2.2.1

    接着,为了在Spring中使用Quartz,我们需要配置Spring的JobFactory。这通常通过实现`org.springframework.scheduling.quartz.SchedulerFactoryBean`的配置类来完成。例如: ```java @Configuration public class ...

    spring 集成quartz 用数据库实现quartz的集群

    在Spring中,我们可以通过`@EnableScheduling`注解开启定时任务支持,然后通过`@Scheduled`注解在方法上定义定时规则。但这仅限于单机环境,若要实现分布式定时任务,我们需要引入Quartz。 集成Quartz的第一步是...

    spring集成quartz所需文件

    在描述中提到 "spring和quartz1.x及quartz2.x集成",这意味着我们要关注的是两种不同版本的 Quartz。Quartz 1.x 是较早的版本,而 Quartz 2.x 是后续的更新,增加了许多新特性,提升了性能和稳定性。集成时需要注意...

    spring+quartz demo

    Spring 提供了与 Quartz 集成的模块,使得在 Spring 应用程序中使用 Quartz 更加便捷,包括 Job 实例的管理、触发器的配置以及对 Quartz Scheduler 的控制。 在这个 "spring+quartz demo" 中,我们可以学习到如何将...

    关于spring中quartz的配置

    以下将详细介绍如何在Spring中配置Quartz以及相关知识点。 1. **引入依赖** 在开始配置之前,首先需要在项目的`pom.xml`或`build.gradle`文件中引入Quartz和Spring相关的依赖库。对于Maven项目,可以添加如下依赖...

    spring3整合quartz1.8和spring3整合quartz2.2两个版本示例

    - **事务管理**:当 Job 需要在事务环境中执行时,需要确保 Spring 事务管理与 Quartz 的集成正确。 - **错误处理**:合理处理 Job 执行异常,避免影响整个 Scheduler 的运行。 - **资源释放**:应用关闭时,确保...

    Spring 4.2 集成 Quartz2 任务调度示例

    在Spring中,你可以定义一个实现了`org.springframework.scheduling.quartz.JobDetailBean`的类来表示一个任务,然后通过`CronTriggerBean`或`SimpleTriggerBean`定义触发规则。 ```java @Bean public ...

    Spring3.2.3+Quartz2.2 整合配置

    首先,集成Quartz到Spring项目中,我们需要在项目的`pom.xml`或`build.gradle`文件中添加Quartz和Spring的相关依赖。对于Spring 3.2.3,确保引入了如下的Maven依赖: ```xml &lt;groupId&gt;org.springframework ...

    quartz和spring-quartz

    Quartz和Spring-Quartz是两个在Java世界...“spring-quartz-demo”可能是一个完整的示例项目,你可以通过运行它来深入理解Quartz在Spring中的应用。通过研究这些资源,你可以更全面地掌握Quartz和Spring-Quartz的用法。

    Spring集成Quartz的代码示例

    为了使这个Job能在Spring中被管理,你需要为它创建一个Spring Bean,并使用`@Component`或`@Service`注解: ```java @Component("myJob") public class MyJob implements Job { // ... } ``` 接下来,创建Trigger...

    Spring中Quartz的配置

    ### Spring中Quartz的配置详解 #### 一、前言 Spring框架因其强大的功能和灵活性在企业级应用开发中占据了一席之地。其中,对于定时任务的支持,Spring结合了Quartz这一优秀的开源任务调度框架,提供了更为灵活和...

    springtask 和 quartz +ssh简单示例

    springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例

    Spring Quartz集成

    总结来说,Spring Quartz集成提供了在Spring环境中便捷地管理和调度定时任务的能力,通过配置文件可以实现任务的静态定义,而在需要动态调整时,可以通过自定义扩展来实现更复杂的需求。理解这些核心概念和机制,...

Global site tag (gtag.js) - Google Analytics