spring quartz 常见的"Table 'database.qrtz_locks' doesn't exist异常"
原因:出现此异常,通常是因为spring配了
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
default-autowire="byName"
>
原理:
<bean id="scheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
此bean会试图访问数据库获取quartz的一些管理表信息,自然访问数据库时需要注入dataSource bean,当缺省autowire为no,则没有dataSource bean被注入,quartz会认为项目没连数据库,会BYPASS这个访问管理表的功能.
当你配置了default-autowire=byName时,dataSource bean被自动注入,这时quartz认为项目既然能连到数据库,就想当然的认为对应的那些表一定存在,没找到时就出异常.
解决办法:
1.去掉default-autowire=byName即可
此法简单,但往往很难决定,因为缺省,谁也不会傻乎乎的显示配这么一条,配了它一定是有用到它的地方.你愿不愿意牺牲这部分byName注入的功能?
2.在库中建对应的表
此法不可取,因为非常麻烦,要建很多表
CREATE TABLE QRTZ_LOCKS
CREATE TABLE QRTZ_JOB_DETAILS
CREATE TABLE QRTZ_TRIGGERS
CREATE TABLE QRTZ_FIRED_TRIGGERS
CREATE TABLE QRTZ_JOB_LISTENERS
少一张,spring都报异常, 这是为大型调度功能准备的.你要有上百个任务,可能需要它.
3.bean里直接关掉autowired
推荐此法
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
default-autowire=byName
>
<bean id="scheduler" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
转载于:https://my.oschina.net/u/225084/blog/161044
分享到:
相关推荐
使用Quartz持久化功能时,还需要配置Scheduler的属性,如数据源、表前缀等,这通常在`quartz.properties`配置文件中进行。正确配置后,Quartz会在启动时自动将任务信息写入数据库,同时在系统重启后能从数据库中恢复...
quartz-2.2.3版本集群部署方式,需要创建的11张表的sql 文件,很多文章没有分享,一定要注意版本,不同的版本sql脚本不同
CREATE TABLE QRTZ_JOB_DETAILS ( SCHED_NAME VARCHAR(120) NOT NULL, JOB_NAME VARCHAR(200) NOT NULL, JOB_GROUP VARCHAR(200) NOT NULL, DESCRIPTION VARCHAR(250) DEFAULT NULL, JOB_CLASS_NAME VARCHAR...
- 主要的Quartz数据库表包括`QRTZ_JOB_DETAILS`, `QRTZ_TRIGGERS`, `QRTZ_CRON_TRIGGERS`, `QRTZ_SIMPLE_TRIGGERS`, `QRTZ_BLOB_TRIGGERS`, `QRTZ_CALENDARS`, `QRTZ_PAUSED_TRIGGER_GRPS`, `QRTZ_FIRED_TRIGGERS`,...
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="configLocation" value="classpath:quartz.properties"/> ``` 在`quartz.properties`中,我们...
在提供的"quartz.sql"文件中,很可能是包含了Quartz框架所需的数据库表结构和初始化数据。这些表通常包括以下几部分: 1. `QRTZ_JOB_DETAILS`:这个表存储了作业的详细信息,如作业类名、作业组名、描述等。每个...
【irm.rar_IRM_quartz-1.5.1.j_北向接口】这个标题暗示了我们正在处理一个关于远程接口管理(IRM)的项目,其中使用了quartz-1.5.1.j版本的库,并且关注的是北向接口。在IT领域,"北向接口"通常指的是系统对外提供的...
3. **定义作业类**:创建实现`org.quartz.Job`接口的类,定义作业的具体行为。在`execute(JobExecutionContext context)`方法中编写实际要执行的业务逻辑。 4. **声明作业**:在Spring配置文件中声明作业,使用`...
在Spring Boot应用中整合Quartz作为任务调度框架是常见的需求,用于执行周期性的后台任务。然而,在实际操作中,可能会遇到一些错误,如"ObjectAlreadyExistsException",这通常是由于Quartz在尝试创建已存在的Job时...
Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz中,任务和触发器的配置信息是通过数据库存储的,这使得任务调度具有高可用性和可扩展性。这里我们将详细探讨...
- **org.quartz.impl**:包含 Quartz 的实现类,如 `org.quartz.impl.StdSchedulerFactory` 用于创建 Scheduler 实例,`org.quartz.impl.jdbcjobstore` 包含了数据库存储相关的实现。 - **org.quartz.triggers**:...
Jobs是实际要执行的工作单元,它们实现了`org.quartz.Job`接口,并通过`execute()`方法来定义其执行逻辑。而Triggers则定义了何时以及如何触发这些Jobs。你可以设置触发器基于时间(如每分钟、每天特定时间)或事件...
实现把job持久化数据库,里面有...1.2 Quartz配置文件quartz.properties 4 1.3 创建job 6 1.3.1 实现org.quartz.Job接口 6 1.3.2 把以上job持久化到数据库中 6 1.4 启动job所需条件 6 1.4.1 在web.xml中加入如下监听 6
SpringBoot学习Demo是一个针对初学者的入门项目,旨在帮助开发者快速理解并掌握Spring Boot的核心概念和用法。Spring Boot是Spring框架的一个模块,它简化了创建独立的、生产级别的基于Spring的应用程序的过程,通过...
Spring Batch 是一个强大的开源批处理框架,主要用于处理大量数据,尤其在企业级应用中非常常见。这份名为“spring-batch-reference.pdf”的英文文档是Spring Batch的官方参考指南,对于深入理解该框架及其功能至关...
你需要创建一个类实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法来定义你的任务逻辑。 2. **Trigger**:触发器定义了任务何时运行。Quartz提供了多种类型的Trigger,如SimpleTrigger...
- 初始化SQL语句执行后,还需确保Quartz的配置文件(如`quartz.properties`)中的表名与创建的数据库表一致。 总之,Quartz 2.2.3的初始化SQL语句是搭建Quartz任务调度系统的重要环节,它们构建了存储任务调度数据...
作业是实际执行的任务,可以是任何实现了`org.quartz.Job`接口的类。 3. **QRTZ_CRON_TRIGGERS**:对于使用Cron表达式来定义执行时间的触发器,它们的详细信息会被存储在这个表中,包括Cron表达式、时区等。 4. **...
结合 Spring 框架,可以轻松地在 Spring 应用中集成 Quartz,实现灵活的定时任务管理。 总结来说,Quartz 是一个强大且灵活的作业调度框架,通过其丰富的特性,可以在各种应用场景下实现复杂的时间驱动任务调度。...
10. **QRTZ_LOCKS**:用于实现并发控制和调度器内部同步的锁。 在初始化数据库之前,你需要根据你的数据库类型(如MySQL、Oracle、SQL Server等)对这些脚本进行适当的调整,例如更改表前缀、数据类型等。一旦...