Quartz调度器迁移Postgres遇BYTEA转long错误求助
Quartz迁移PostgreSQL后类型转换错误解决方案
1. 核对官方PostgreSQL表结构
不要手动将MySQL的BLOB统一改为PostgreSQL的BYTEA,Quartz官方提供了适配PostgreSQL的数据库初始化脚本,你可以对比自己的表结构,重点检查触发器相关表(如QRTZ_TRIGGERS)中数值类型列(比如NEXT_FIRE_TIME、PREV_FIRE_TIME、PRIORITY)是否被错误设置为BYTEA——这是引发“BYTEA转long”错误的核心原因。
2. 修正错误列类型
找到被误设为BYTEA的数值列,执行SQL修改类型。例如,如果QRTZ_TRIGGERS的NEXT_FIRE_TIME列类型错误,执行:
ALTER TABLE QRTZ_TRIGGERS ALTER COLUMN NEXT_FIRE_TIME TYPE bigint USING NEXT_FIRE_TIME::bigint;
根据实际错误列调整表名和列名。
3. 配置正确的Quartz数据库Delegate
在Quartz配置文件中指定PostgreSQL专属的驱动代理类,确保类型转换逻辑适配PostgreSQL:
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate org.quartz.jobStore.dataSource=yourDataSourceName org.quartz.dataSource.yourDataSourceName.driver=org.postgresql.Driver
4. 清理旧任务数据
如果是从MySQL导入的历史任务数据,可能存在二进制数据不兼容问题。清空Quartz相关表后重新初始化任务:
TRUNCATE TABLE QRTZ_FIRED_TRIGGERS; TRUNCATE TABLE QRTZ_PAUSED_TRIGGER_GRPS; TRUNCATE TABLE QRTZ_SCHEDULER_STATE; TRUNCATE TABLE QRTZ_LOCKS; TRUNCATE TABLE QRTZ_SIMPLE_TRIGGERS; TRUNCATE TABLE QRTZ_SIMPROP_TRIGGERS; TRUNCATE TABLE QRTZ_CRON_TRIGGERS; TRUNCATE TABLE QRTZ_BLOB_TRIGGERS; TRUNCATE TABLE QRTZ_TRIGGERS; TRUNCATE TABLE QRTZ_JOB_DETAILS; TRUNCATE TABLE QRTZ_CALENDARS;
内容的提问来源于stack exchange,提问作者Vishnuraj
相关产品推荐
相关产品推荐

