问题现象

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. SpringBoot实现RequestBodyAdvice和ResponseBodyAdvice接口

    Spring Boot 提供了一种机制,允许开发者在请求体(RequestBody)和响应体(ResponseBody)被处理之前和之后执行自定义逻辑.这通过 RequestBodyAdvice 和 ...

  2. SpringBoot Maven查看依赖树

    dependency:tree -f pom.xml

  3. 论文阅读: 面向Planning的端到端智驾Planning-oriented Autonomous Driving

    原文地址:https://arxiv.org/abs/2212.10156 背景 当代自动驾驶系统多采用序列化的模块化的任务处理方式,比如感知.预测.规划等.为了处理多样的任务.达到高水平智能,当代智 ...

  4. SpringSecurity安全管理

    SpringSecurity安全管理 一.安全简介 在 Web 开发中,安全一直是非常重要的一个方面,因此从应用开发的第一天就应该把安全相关的因素考虑进来,并在整个应用的开发过程中. 主要安全框架:S ...

  5. Java开发工具和历史版本

    eclipse 的历史版本: 版本代号 平台版本 主要版本发行日期 SR1发行日期 SR2发行日期 SR3发行日期 代号名称 N/A 3.0 2004年6月21日 [2]  N/A N/A N/A N ...

  6. AI驱动音乐创新,网易数帆X云音乐刷新MIREX世界纪录 网易数帆 网易数帆

    在近期揭榜的2021国际音频检索评测大赛(MIREX)上,网易数帆易智语音团队携手网易云音乐音视频实验室,凭借生产级AI技术创新能力,在歌词识别和歌单识别两个赛道大幅打破世界纪录夺得冠军. MIREX ...

  7. oeasy教您玩转vim - 44 - # 综合练习

    ​ 综合练习 回忆上节课内容 上次我们学到了各种的替换模式 r,替换当前光标的字符 R,进入替换模式 ~,改变大小写 这次来个综合练习吧! 我们这次要完成这样一个任务 我们有的时候需要写日志 Syst ...

  8. AT_agc017_b 题解

    洛谷链接&Atcoder 链接 本篇题解为此题较简单做法,请放心阅读. 题目简述 一共有 \(n\) 个格子,给定两个整数 \(A,B\) 分别位于第 \(1\) 和第 \(n\) 格,中间有 ...

  9. 基于树莓派的OpenWrt系统打开蓝牙功能

    在树莓派设备上的OpenWrt系统打开蓝牙功能 1. 安装必要的软件包 首先,你需要确保OpenWrt系统上安装了必要的蓝牙软件包.你可以通过OpenWrt的包管理器来安装它们.在OpenWrt系统上 ...

  10. odoo 开发入门教程系列-基本视图

    在上一章中已经看到,odoo能够为给定模型生成默认视图.实际上,默认视图对于业务应用程序来说是不可接受的.相反,我们至少应该以逻辑的方式组织各个字段. 视图是在带有操作和菜单的XML文件中定义的.它们 ...