升级测试步骤
- 下载1.8.2公司源码到本地,执行1.8.2xxljob mysql建表语句,本地运行1.8.2admin和excutor,并测试可以调度
- gitHub下载2.3.0源码到本地,执行2.3.0xxljob mysql建表语句,本地运行2.3.0admin和excutor,并测试可以调度
- 编写1.8.2到2.3.0数据迁移策略,编写迁移脚本,本地执行
- 用2.3.0 admin连接迁移后的数据库,检查数据是否有问题。
- 将auto xxl excutor执行器迁移到auto-net,迁移及修改auto-net项目的打包为xxljob执行器的ant配置。测试可以启动excutor执行器
- 迁移src/com/tpaic/auto/biz/xxl文件夹
- 迁移com/tpaic/auto/presentation/util/ServiceRequestID.java类
- 迁移com/tpaic/auto/biz/service/ServiceLocator.java内部一部分代码
- 迁移com/tpaic/auto/biz/service/support/AutoCallBackPortalMqSupport.java类
- 迁移com/tpaic/auto/biz/service-context.xml等配置文件内部bean配置
- 迁移config/job文件下的spring配置文件
- 升级本地auto-net excutor版本为2.3.0jar,修改注解等。(具体差别见)
- 2.3.0 admin连接迁移后的数据库,调度本地auto-net excutor,测试可以调度
- 上云,集成测试。
- 使用ant构建,修改源码路径,修改Targets,修改构建文件名称,修改branch
- 集成disconf配置中心
- 本地是在tomcat的conf增加disconf.properties,里面有配置中心地址。应用名,环境名等 。然后job的 tpaic-auto-servlet.xml 文件添加disconf相应标签。配置好了这个就可以使用AMC应用配置中心的properties。
- 上云的话,已经不需要disconf.properties。环境名和应用名是jvm参数指定的。就是迁移xml配置文件就行了
- 注意admin中还有其他系统的exector执行器,未测试新旧版本之间兼容,可能会导致其他executor不可用
- 后续测试
数据迁移策略
| 2.3.0表名 | 迁移策略 | | —- | —- | | xxl_job_group | 和xxl_job_qrtz_trigger_group表结构基本一致,迁移该表数据
1. 移除order字段
1. 新增update_time字段
1. 修改address_list数据类型由varchar变为text
| | xxl_job_info | 和xxl_job_qrtz_trigger_info表结构基本一致,迁移该表数据
1. 移除job_cron,任务执行CRON
1. 新增schedule_type,调度类型(基于1.8.2应赋默认值CRON)
1. 新增schedule_conf,调度配置,值含义取决于调度类型(应赋值为job_cron字段)
1. 新增misfire_strategy,调度过期策略((基于1.8.2应赋值默认值DO_NOTHING)
1. 新增executor_timeout,任务执行超时时间,单位秒(应赋值默认值0)
1. 移除executor_fail_strategy,失败处理策略
1. 新增executor_fail_retry_count,失败重试次数(默认为0)
1. 修改字段名称由child_jobkey变为child_jobid,子任务ID,多个逗号分隔
1. 新增trigger_status,调度状态:0-停止,1-运行(xxl_job_qrtz_triggers表的TRIGGER_STATE,0-PAUSED,1-ACQUIRED,1-WAITING)
1. 新增trigger_last_time,上次调度时间(该值会自动更新,默认赋0)
1. 新增trigger_next_time,下次调度时间(该值会自动更新,默认赋0)
| | xxl_job_lock | 无需迁移 | | xxl_job_log | 和xxl_job_qrtz_trigger_log表结构基本一致,迁移该表数据
1. 移除glue_type字段
1. 新增executor_sharding_param,执行器任务分片参数,格式如 1/2(默认为空)
1. 新增executor_fail_retry_count,失败重试次数 (默认0)
1. 新增alarm_status,告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败
| | xxl_job_log_report | 无需迁移 | | xxl_job_logglue | 与xxl_job_qrtz_trigger_logglue表结构基本一致,迁移该表数据。
1. 修改add_time与update_time字段类型由timestamp改成datetime
1. 修改glue_source字段类型由mediumtext改为text
| | xxl_job_registry | 与xxl_job_qrtz_trigger_registry表结构基本一致,直接迁移
1. 修改registry_group字段类型由varchar(255)改为varchar(50)
1. 修改update_time字段类型由timestamp改为datetime
| | xxl_job_user | 无需迁移 |
INSERT INTO xxl_job_group(id,app_name,title,address_type,address_list,update_time) SELECT id,app_name,title,address_type,address_list,NOW() FROM xxl_job_qrtz_trigger_group;
INSERT INTO xxl_job_info(id,job_group,job_desc,add_time,update_time,author,alarm_email,schedule_type,schedule_conf,misfire_strategy,executor_route_strategy,executor_handler,executor_param,executor_block_strategy,executor_timeout,executor_fail_retry_count,glue_type,glue_source,glue_remark,glue_updatetime,child_jobid,trigger_status,trigger_last_time,trigger_next_time) SELECT t1.id,t1.job_group,t1.job_desc,t1.add_time,t1.update_time,t1.author,t1.alarm_email,'CRON',t1.job_cron,'DO_NOTHING',t1.executor_route_strategy,t1.executor_handler,t1.executor_param,t1.executor_block_strategy,0,0,t1.glue_type,t1.glue_source,t1.glue_remark,t1.glue_updatetime,t1.child_jobkey,case t2.TRIGGER_STATE when 'PAUSED' then 0 when 'ACQUIRED' then 1 when 'WAITING' then 1 end,0,0 FROM xxl_job_qrtz_trigger_info t1,xxl_job_qrtz_triggers t2 where t1.id=t2.TRIGGER_NAME ;
INSERT INTO xxl_job_log(id,job_group,job_id,executor_address,executor_handler,executor_param,executor_sharding_param,executor_fail_retry_count,trigger_time,trigger_code,trigger_msg,handle_time,handle_code,handle_msg,alarm_status) SELECT t1.id,t1.job_group,t1.job_id,t1.executor_address,t1.executor_handler,t1.executor_param,NULL,0,t1.trigger_time,t1.trigger_code,t1.trigger_msg,t1.handle_time,t1.handle_code,t1.handle_msg,0 FROM xxl_job_qrtz_trigger_log t1;
INSERT INTO xxl_job_logglue(id,job_id,glue_type,glue_source,glue_remark,add_time,update_time) SELECT t1.id,t1.job_id,t1.glue_type,t1.glue_source,t1.glue_remark,t1.add_time,t1.update_time FROM xxl_job_qrtz_trigger_logglue t1;
INSERT INTO xxl_job_registry(id,registry_group,registry_key,registry_value,update_time) SELECT t1.id,t1.registry_group,t1.registry_key,t1.registry_value,t1.update_time FROM xxl_job_qrtz_trigger_registry t1;
很多JobDetaile类中依赖的service在auto-net不存在,service内又有嵌套不不存在的service依赖,迁移类、xml配置、jndi配置,
还有最后改过和没改过的job 测试是简单的看调度执行有没有报错,还是搞懂定时任务在作什么,根据数据测试。