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

这是一个很奇怪的错误,从打印的异常信息可以看出: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进行改名;

spring -boot 整合 quartz 候,连接windows的mysql的 候好好的,然而用linux上的mysql的 候,启动就报了这个错: Failu re obta ini ng db row lock : Table ‘test.QRTZ_ LOCK S’ doesn’t exist 首先用windows的mysql是没问题的。 其实linux的mysql也是有这个表的,但由于是从windows复制过去的,所以表名都是小写的,而 quartz 启动的 候找的是大写,所以认为test.QRTZ 1.1何为锁 锁在现实 的意义为:封闭的器物,以钥匙或暗码开启。在计算机 的锁一般用来管理对共享资源的并发访问,比如我们java同学熟悉的 Lock ,synchronized等都是我们常见的锁。当然在我们的数据库 也有锁用来控制资源的并发访问,这也是数据库和文件系统的区别之一。 1.2为什么要懂数据库锁? 通常来说对于一般的开发人员,在使用数据库的 候一般懂点DQL(select),DML...
部署后端项目的 候遇到 Failu re obta ini ng db row lock : Table ‘XXX.qrtz_ LOCK S‘ doesn‘t exist,百思不得其解,一开始以为是数据库版本问题,后来经过测试不是版本问题,于是乎查阅资料发现是mysql对表大小写有要求,但是当 创建表的 候都是小写,所以说就查不到qrtz_ LOCK S这张表,所以就报错了,知道问题了就好解决了。 解决办法: 1. ~~删除掉所有的qrtz表,重新创建以大写命名的表~~ 2. 找到mysql的配置文件 my.cnf 路径在e
当在IDEA 配置了云服务器的MySQL Caused by: org. quartz .impl.j db cjobstore. Lock Exception : Failu re obta ini ng db row lock : Table 'amops.QRTZ_ LOCK S' doesn't exist 因为在Linux平台下面MySQL默认是严格区分大小写的,需要去修改MySQL的配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 在mysqld下添加以下内容 lower
当在IDEA 配置了云服务器的MySQL Caused by: org. quartz .impl.j db cjobstore. Lock Exception : Failu re obta ini ng db row lock : Table 'amops.QRTZ_ LOCK S' doesn't exist 因为在Linux平台下面MySQL默认是严格区分大小写的,需要去修改MySQL的配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 在mysqld下添加以下内容
org. quartz .impl.j db cjobstore. Lock Exception : Failu re obta ini ng db row lock : Table ‘india_framework.QR
将Windows上的mysql数据迁移到Linux上后,报这个错:org. quartz .impl.j db cjobstore. Lock Exception : Failu re obta ini ng db row lock : Table 'india_framework.QRTZ_ LOCK S' doesn't exist首先用windows的mysql是没问题的。 其实linux的mysql也是有这个表的,但由于是从windows复制过去的,所以表名都是小写的,而 quartz 启动的 候找的是大写,所以认为test.Q
在windows下数据库都运行的好好的,放在Linux 里就报错了!这是因为在Linux下,MySQL的表名区分大小写,而在Windows下是不区分,从Windows下导出的数据脚本 使用的是小写,而Hibernate生成的SQL 表名是大写的,所以查不出数据。 接下来就是设置MySQL数据库不区分大小写。 我们先查找一下,发现它默认为0是区分大小写的,那么我们就需要设置将其设置为1。 show vari ab les like '%lower_case%'; 我们可以用如下命令进行设置
1.产生的错误日志 ERROR [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tun i ng )'] (ContextLoader.java:215) - Context ini tialization fai led org. spring framework.beans.factory.BeanCreatio...
org. quartz .impl.j db cjobstore. Lock Exception : Failu re obta ini ng db row lock : Table 'aly_uias.qrtz_ LOCK S' doesn't exist 异常 信息表明:在创建 quartz 自带表 ,表明是小写的,程序 使用的是大写表明,由于mysql数据库...