我是靠谱客的博主 可爱花生,最近开发中收集的这篇文章主要介绍quartz2.2.3 spring整合遇到的错误,及quartz配置文件说明,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

出现 Couldn't acquire next trigger: ORA-08177: 无法连续访问此事务处理错误:
1:可能是由org.quartz.jobStore.txIsolationLevelSerializable设置为true的原因,将此属性设置为false
2:你的job类中可能做了大量的和数据库交互的代码,但是job默认是多线程并发执行的,出现任务堆积导致,如果使用MethodInvokingJobDetailFactoryBean方式只需设置concurrent为false即可
如果使用实现job接口或者继承QuartzJobBean等类时需要在此job实现类上添加 @DisallowConcurrentExecution注解
3:无法连续访问此事物,出现这种情况一般是insert或者update语句的事物还没提交,另外再次使用insert/update/delete等语句操作了此数据

出现数据库连接错误
1:可能org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate 配置不太合适,根据自己的数据库配置相应的值,可在
org.quartz.impl.jdbcjobstore包或者其子包下寻找合适的配置

quartz集群时使用crontrigger但是没有执行错过的任务
描述:使用crontrigger 重启quartz时没有执行错过的任务
解决:可能是org.quartz.jobStore.misfireThreshold属性的值设置的不合理

出现java.sql.SQLException: ORA-01453: SET TRANSACTION 必须是事务处理的第一个语句
1:可能你在配置文件中配置了多个数据源,解决方法:只配置一个
2:可能是由org.quartz.jobStore.txIsolationLevelSerializable设置为true的原因,将此属性设置为false

配置文件详解如下:
属性     默认值
org.quartz.jobStore.driverDelegateClass     
描述:能理解不同数据库系统中某一特定方言的驱动代理    
org.quartz.jobStore.dataSource     
描述:用于 quartz.properties 中数据源的名称    
org.quartz.jobStore.tablePrefix     QRTZ_
描述:指定用于 Scheduler 的一套数据库表名的前缀。假如有不同的前缀,Scheduler 就能在同一数据库中使用不同的表。    
org.quartz.jobStore.userProperties     FALSE
描述:"use properties" 标记指示着持久性 JobStore 所有在JobDataMap 中的值都是字符串,因此能以 名-值 对的形式存储,而不用让更复杂的对象以序列化的形式存入 BLOB 列中。这样会更方便,因为让你避免了发生于序列化你的非字符串的类到 BLOB 时的有关类版本的问题。    
org.quartz.jobStore.misfireThreshold     60000
描述:在 Trigger 被认为是错过触发之前,Scheduler 还容许 Trigger 通过它的下次触发时间的毫秒数,默认值(假如你未在配置中存在这一属性条目) 是60000(60 秒)。这个不仅限于JDBC-JobStore;它也可作为RAMJobStore 的参数    
org.quartz.jobStore.isClustered     FALSE
描述:设置为 true 打开集群特性。如果你有多个 Quartz 实例在用同一套数据库时,这个属性就必须设置为 true。    
org.quartz.jobStore.clusterCheckinInterval     15000
描述:设置一个频度(毫秒),用于实例报告给集群中的其他实例。这会影响到侦测失败实例的敏捷度。它只用于设置了 isClustered 为 true 的时候。    
org.quartz.jobStore.maxMisfiresToHandleAtATime     20
描述:这是 JobStore 能处理的错过触发的 Trigger 的最大数量。处理太多(超过两打) 很快会导致数据库表被锁定够长的时间,这样就妨碍了触发别的(还未错过触发) trigger 执行的性能。    
org.quartz.jobStore.dontSetAutoCommitFalse     FALSE
描述:设置这个参数为 true 会告诉 Quartz 从数据源获取的连接后不要调用它的 setAutoCommit(false) 方法。这在少些情况下是有帮助的,比如假如你有这样一个驱动,它会抱怨本来就是关闭的又来调用这个方法。这个属性默认值是 false,因为大多数的驱动都要求调用setAutoCommit(false)。    
org.quartz.jobStore.selectWithLockSQL     SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
描述:这必须是一个从 LOCKS 表查询一行并对这行记录加锁的 SQL 语句。假如未设置,默认值就是 SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE,这能在大部分数据库上工作。{0} 会在运行期间被前面你配置的TABLE_PREFIX 所替换。    
org.quartz.jobStore.txIsolationLevelSerializable     FALSE
描述:值为 true 时告知 Quartz(当使用 JobStoreTX 或 CMT) 调用 JDBC 连接的setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) 方法。这有助于阻止某些数据库在高负载和长时间事物时锁的超时。    
org.quartz.dataSource.NAME.driver
描述:JDBC 驱动类的全限名,NAME是上方dataSource指定的值
org.quartz.dataSource.NAME.URL
描述:连接到你的数据库的 URL(主机,端口等)
org.quartz.dataSource.NAME.user
描述:用于连接你的数据库的用户名
org.quartz.dataSource.NAME.password
描述:用于连接你的数据库的密码
org.quartz.dataSource.NAME.maxConnections
描述:DataSource 在连接接中创建的最大连接数
org.quartz.dataSource.NAME.validationQuary
描述:一个可选的 SQL 查询字串,DataSource 用它来侦测并替换失败/断开的连接。例如,Oracle 用户可选用 select table_name from user_tables,这个查询应当永远不会失败,除非直的就是连接不上了。

最后

以上就是可爱花生为你收集整理的quartz2.2.3 spring整合遇到的错误,及quartz配置文件说明的全部内容,希望文章能够帮你解决quartz2.2.3 spring整合遇到的错误,及quartz配置文件说明所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部