问题现象

Quartz 是一个广泛应用于企业级应用中的开源作业调度框架,它主要用于在Java环境中管理和执行任务。

为了任务调度,Quartz的数据模型中使用了大量的布尔值记录任务、流程的各种状态,如:

Quartz使用JDBC写入任务状态代码:

ps = conn.prepareStatement();
setBoolean(ps, 5, job.isDurable());

调用YashanDB报错:YAS-04008 IS_DURABLE size exceeding limit 1

相关问题单:JDBC驱动布尔值写入和oracle不一致

问题的风险及影响

因为Quartz应用得广泛,通常有任务调度的地方均会遇到,必然会产生报错,后续其他开源框架也会有类似问题。

问题影响的版本

YashanDB版本:23.2.0.12

问题发生原因

字段类型是字符串类型,使用setBoolean或pstmt.setObject, 崖山db记录是true/false,oracle是0/1,将字段加长之后可以写入成功,开源框架使用的是varchar(1)导致写入长度超长。

崖山写入数据情况:

Oracle写入数据情况:

解决方法及规避方式

1、通过简单的将布尔值转换为整数pstmt.setInt(1, booleanValue ? 1 : 0); 规避,需要修改开源框架代码。

2、修改db字段长度为varchar(5),写入字符的true/false:可以写入任务的状态,但是后面任务状态判断需要读取,可能会导致状态异常,调度异常,需要排查。

3、修改db字段为boolean:可以正常写入数据,但后面任务状态判断需要读取,可能会导致状态异常,调度异常,需要排查。

方式1需要客户修改Quartz源码并编译,复杂性较高,客户不接受。

方式2/3本质是一样的,涉及的布尔值字段10+,需要测试后续的调用能全部走通,需要客户配合修改测试。其中方式3已经有实际客户测试可以跑通,功能正确。

问题分析和处理过程

通过返回错误信息分析原因,问题比较明确,核心是在于怎么做规避并彻底解决。

1、原因确认

驱动报错信息是比较明确的,YashanDB是true/false,Oracle是0/1,导致写入长度超长。通过简单的JDBC接口测试明确(见上面”问题发生原因”截图)

2、规避方案分析

Oracle不支持字段类型为布尔类型,转换为0/1,YashanDB支持布尔值,两者之间存在差异。分析相应的规避方案,修改db字段为boolean,任务调度平台跑通。

3、最终解决方案

规避方案3虽然能暂时解决问题,但是如果客户的系统在不同环境部署,需要维护多个版本,会导致维护成本增加,且是一个普遍现象,YashanDB在23.2.0.33版本开始,对布尔值写入改为和Oracle一致。相关需求:JDBC驱动布尔值写入和oracle一致

经验总结

1、了解Quartz开源框架的情况,在任务调度的场景应用很广。

2、YashanDB出生较晚,保持和Oracle一致较好地兼容各类开源组件。

3、如果是23.2.0.33以下的版本,可以将布尔字段修改为boolean(所有is开头,varchar(1)的字段),可以解决兼容问题。适合没有部署不同数据库的场景。

【YashanDB知识库】开源调度框架Quartz写入Boolean值到YashanDB报错的更多相关文章

  1. 开源调度框架Quartz最佳实践

    开源调度框架Quartz最佳实践 Quartz是一个Java调度框架,当前的最新版本为2.2.1. 以Quartz 2.2.1版为例,Quartz最佳实践(用于生产系统)总结如下: 1.跳过更新检查Q ...

  2. 分布式开源调度框架TBSchedule原理与应用

    主要内容: 第一部分 TBSchedule基本概念及原理 1. 概念介绍 2. 工作原理 3. 源代码分析 4. 与其它开源调度框架对照 第二部分 TBSchedule分布式调度演示样例 1. TBS ...

  3. 通过源码分析Java开源任务调度框架Quartz的主要流程

    通过源码分析Java开源任务调度框架Quartz的主要流程 从使用效果.调用链路跟踪.E-R图.循环调度逻辑几个方面分析Quartz. github项目地址: https://github.com/t ...

  4. python3写入文件时编码问题报错

    在字符串写入文件时,有时会因编码问题导致无法写入,可在open方法中指定encoding参数 chfile = open(filename, 'w', encoding='utf-8') 这样可解决大 ...

  5. 运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法

    运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法 问题一: SyntaxError: missing ) after argument list in .....\vie ...

  6. .NET开源作业调度框架(Quartz.NET和FluentScheduler)实战项目演练

    一.课程介绍 明人不说暗话,跟着阿笨一起玩NET .本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享 ...

  7. 使用laravel框架开发接口时ajax post请求报错419

    nginx服务器,使用laravel框架开发后台接口.get请求正常,但是post请求一直报错.H5和APP都不成功,code=419. 解决办法: 找到 VerifyCsrfToken.php文件( ...

  8. Django2.1.3框架中(fields.E300)和(fields.E307)报错处理

    使用Django框架创建了Web项目,修改了模型models.py之后,执行数据库迁移操作,出现如下报错: models.py内容如下: from django.db import models fr ...

  9. .Net平台开源作业调度框架Quartz.Net

    Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...

  10. (转).Net平台开源作业调度框架Quartz.Net

    Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...

随机推荐

  1. 转-tomcat在控制台打印时乱码

    描述 使用windows的控制台启动tomcat (8.5),Tomcat终端打印出现乱码,在CSDN上找到一个简单有效的解决办法,在此记录. 解决方案 找到Tomcat的根目录下的 /conf/lo ...

  2. 一个难忘的json反序列化问题

    前言 最近我在做知识星球中的商品秒杀系统,昨天遇到了一个诡异的json反序列化问题,感觉挺有意思的,现在拿出来跟大家一起分享一下,希望对你会有所帮助. 案发现场 我最近在做知识星球中的商品秒杀系统,写 ...

  3. Mysql生成实体类

    -- 查询数据表结构 SELECT CONCAT('"e.',SUBSTRING(COLUMN_NAME,1),',"+'),COLUMN_NAME,',',COLUMN_TYPE ...

  4. Microsoft Compatibility telemetry占cpu资源高

    1.在Windows10系统卡的时候,打开任务管理器,发现Microsoft Compatibility telemetry占用了大量的系统资源,特别是CPU占用率非常高. 位置:控制面板->管 ...

  5. 基于FileZilla上传、下载服务器数据的方法

      本文介绍FileZilla软件的下载.配置与使用方法.   在之前的博客中,我们提到了下载高分遥感影像数据需要用到FTP(文件传输协议,File Transfer Protocol)软件FileZ ...

  6. API网关实践-网易云轻舟微服务

    微服务最佳实践中,我们需要通过统一的 API 网关进行服务能力的共享,API 网关为用户提供发布.管理.保护和监控 API的能力,帮助用户在自己的多个系统之间,或者内部系统与合作伙伴以及第三方的系统之 ...

  7. 玄机-第一章 应急响应- Linux入侵排查

    目录 前言 简介 应急开始 准备工作 步骤 1 步骤 2 步骤 3 步骤 4 步骤5 总结 前言 作者这一次也是差一点一次过,因为没有经验的原因,或者说题目对问题描述不太对,如果说是求黑客反连的ip的 ...

  8. vue --version 显示的却是vue cli的版本号,为什么?

    vue --version 显示的却是vue cli的版本号,为什么? 如果您在运行 vue --version 命令时显示的是 Vue CLI 的版本号,而不是 Vue.js 的版本号,那可能是因为 ...

  9. [oeasy]python0072_整数类型_int_integer_整型变量

    帮助手册 回忆上次内容   上次了解的是 字符串 字符串 就是 字符的串 字符串长度 可以用 len函数 字符可以用下标索引 []   可以用str 将整型数字 转化为 字符串   字符的长度本身 有 ...

  10. LeetCode455.分发饼干

    LeetCode题目链接:https://leetcode.cn/problems/assign-cookies/description/ 题目叙述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干 ...