项目场景:
由于项目安全审查要求 xxljob 版本升级。
问题描述
一、升级后执行器调用调度中心的注册接口调不通
看了日志报错信息是调度中心接收的 data 是空的。data 在接口上是使用的 String 类型而且加了@RequstBody 注解,但是这样是无法接收 application/json 类型的。
1、执行器中复制XxlJobRemotingUtil类(包路径和源代码一致),修改其中的 postBody方法中HttpURLConnection 的Content-Type : connection.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded;charset=UTF-8”);
请求的requestBody最好编码下不然接受时有可能解析出错。
如图:
这里插入图片描述](https://img-blog.csdnimg.cn/74c7b18e108848ddad73d3c3f3f21f5e.png)
2、调度中心data 需要 decode:
data = URLDecoder.decode(data, Charset.forName(“UTF-8”));
如图:
二、调用接口需要登录
deafault_token 设置为空,PermissionInterceptor.java中needLogin改为 false
三、提供的JacksonUtil.java转换 json 时有问题,最好不用此类
四、1.7.2的表完全弃用了,2.4.0 版本的表精简了很多,字段也少了一些,配置上也有一些字段名的改变
新增的配置 :xxl.job.executor.logretentiondays=30
五、sql 表语句是 mysql 的 pgsql无法执行,整理了下:
CREATE TABLE xxl_job_info (
id serial NOT NULL,
job_group int4 NOT NULL,
job_desc varchar(255) NOT NULL,
add_time timestamp(6) NULL DEFAULT NULL::timestamp without time zone,
update_time timestamp(6) NULL DEFAULT NULL::timestamp without time zone,
author varchar(64) DEFAULT NULL,
alarm_email varchar(255) DEFAULT NULL,
schedule_type varchar(50) NOT NULL,
schedule_conf varchar(128) DEFAULT NULL,
misfire_strategy varchar(50) NOT NULL DEFAULT 'DO_NOTHING',
executor_route_strategy varchar(50) DEFAULT NULL,
executor_handler varchar(255) DEFAULT NULL,
executor_param varchar(512) DEFAULT NULL,
executor_block_strategy varchar(50) DEFAULT NULL,
executor_timeout int4 NOT NULL DEFAULT '0',
executor_fail_retry_count int4 NOT NULL DEFAULT '0',
glue_type varchar(50) NOT NULL,
glue_source text,
glue_remark varchar(128) DEFAULT NULL,
glue_updatetime timestamp(6) NULL DEFAULT NULL::timestamp without time zone,
child_jobid varchar(255) DEFAULT NULL,
trigger_status int4 NOT NULL DEFAULT '0',
trigger_last_time int8 NOT NULL DEFAULT '0',
trigger_next_time int8 NOT NULL DEFAULT '0',
CONSTRAINT pk_xxl_job_info PRIMARY KEY (id)
);
COMMENT ON COLUMN lululemon.xxl_job_info.job_group IS '执行器主键ID';
COMMENT ON COLUMN lululemon.xxl_job_info.schedule_type IS '调度类型';
COMMENT ON COLUMN lululemon.xxl_job_info.schedule_conf IS '调度配置,值含义取决于调度类型';
COMMENT ON COLUMN lululemon.xxl_job_info.misfire_strategy IS '调度过期策略';
COMMENT ON COLUMN lululemon.xxl_job_info.executor_route_strategy IS '执行器路由策略';
COMMENT ON COLUMN lululemon.xxl_job_info.executor_handler IS '执行器任务handler';
COMMENT ON COLUMN lululemon.xxl_job_info.executor_param IS '执行器任务参数';
COMMENT ON COLUMN lululemon.xxl_job_info.executor_block_strategy IS '阻塞处理策略';
COMMENT ON COLUMN lululemon.xxl_job_info.executor_timeout IS '任务执行超时时间,单位秒';
COMMENT ON COLUMN lululemon.xxl_job_info.executor_fail_retry_count IS '失败重试次数';
COMMENT ON COLUMN lululemon.xxl_job_info.child_jobid IS '子任务ID,多个逗号分隔';
COMMENT ON COLUMN lululemon.xxl_job_info.trigger_status IS '调度状态:0-停止,1-运行';
COMMENT ON COLUMN lululemon.xxl_job_info.trigger_last_time IS '上次调度时间';
COMMENT ON COLUMN lululemon.xxl_job_info.trigger_next_time IS '下次调度时间';
CREATE TABLE xxl_job_log (
id bigserial NOT NULL,
job_group int4 NOT NULL,
job_id int4 NOT NULL,
executor_address varchar(255) DEFAULT NULL,
executor_handler varchar(255) DEFAULT NULL,
executor_param varchar(512) DEFAULT NULL,
executor_sharding_param varchar(20) DEFAULT NULL,
executor_fail_retry_count int4 NOT NULL DEFAULT '0',
trigger_time timestamp(6) NULL DEFAULT NULL::timestamp without time zone,
trigger_code int4 NOT NULL,
trigger_msg text,
handle_time timestamp(6) NULL DEFAULT NULL::timestamp without time zone,
handle_code int4 NOT NULL,
handle_msg text,
alarm_status int4 NOT NULL DEFAULT '0',
CONSTRAINT pk_xxl_job_log PRIMARY KEY (id)
);
CREATE INDEX idx_xxl_job_log_trigger_time ON lululemon.xxl_job_log USING btree (trigger_time);
CREATE INDEX idx_xxl_job_log_handle_code ON lululemon.xxl_job_log USING btree (handle_code);
COMMENT ON COLUMN lululemon.xxl_job_log.job_group IS '执行器主键ID';
COMMENT ON COLUMN lululemon.xxl_job_log.job_id IS '任务,主键ID';
COMMENT ON COLUMN lululemon.xxl_job_log.executor_address IS '执行器地址,本次执行的地址';
COMMENT ON COLUMN lululemon.xxl_job_log.executor_handler IS '执行器任务handler';
COMMENT ON COLUMN lululemon.xxl_job_log.executor_param IS '执行器任务参数';
COMMENT ON COLUMN lululemon.xxl_job_log.executor_sharding_param IS '执行器任务分片参数,格式如 1/2';
COMMENT ON COLUMN lululemon.xxl_job_log.executor_fail_retry_count IS '失败重试次数';
COMMENT ON COLUMN lululemon.xxl_job_log.trigger_time IS '调度-时间';
COMMENT ON COLUMN lululemon.xxl_job_log.trigger_code IS '调度-结果';
COMMENT ON COLUMN lululemon.xxl_job_log.trigger_msg IS '调度-日志';
COMMENT ON COLUMN lululemon.xxl_job_log.handle_time IS '执行-时间';
COMMENT ON COLUMN lululemon.xxl_job_log.handle_code IS '执行-状态';
COMMENT ON COLUMN lululemon.xxl_job_log.handle_msg IS '执行-日志';
COMMENT ON COLUMN lululemon.xxl_job_log.alarm_status IS '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败';
CREATE TABLE xxl_job_log_report (
id bigserial NOT NULL ,
trigger_day timestamp(6) NULL DEFAULT NULL::timestamp without time zone,
running_count int4 NOT NULL DEFAULT '0',
suc_count int4 NOT NULL DEFAULT '0',
fail_count int4 NOT NULL DEFAULT '0',
update_time timestamp(6) NULL DEFAULT NULL::timestamp without time zone,
CONSTRAINT pk_xxl_job_log_report PRIMARY KEY (id)
);
CREATE UNIQUE INDEX idx_xxl_job_log_report_trigger_day ON lululemon.xxl_job_log_report USING btree (trigger_day);
COMMENT ON COLUMN lululemon.xxl_job_log_report.trigger_day IS '调度-时间';
COMMENT ON COLUMN lululemon.xxl_job_log_report.running_count IS '运行中-日志数量';
COMMENT ON COLUMN lululemon.xxl_job_log_report.suc_count IS '执行成功-日志数量';
COMMENT ON COLUMN lululemon.xxl_job_log_report.fail_count IS '执行失败-日志数量';
CREATE TABLE xxl_job_logglue (
id bigserial NOT NULL ,
job_id int4 NOT NULL,
glue_type varchar(50) DEFAULT NULL,
glue_source text,
glue_remark varchar(128) NOT NULL,
add_time timestamp(6) NULL DEFAULT NULL::timestamp without time zone,
update_time timestamp(6) NULL DEFAULT NULL::timestamp without time zone,
CONSTRAINT pk_xxl_job_logglue PRIMARY KEY (id)
);
CREATE TABLE xxl_job_registry (
id bigserial NOT NULL ,
registry_group varchar(50) NOT NULL,
registry_key varchar(255) NOT NULL,
registry_value varchar(255) NOT NULL,
update_time timestamp(6) NULL DEFAULT NULL::timestamp without time zone,
CONSTRAINT pk_xxl_job_registry PRIMARY KEY (id)
);
CREATE INDEX idx_xxl_job_registry_g_k_v ON lululemon.xxl_job_registry USING btree (registry_group,registry_key,registry_value);
CREATE TABLE xxl_job_group (
id serial NOT NULL,
app_name varchar(64) NOT NULL,
title varchar(12) NOT NULL,
address_type int4 NOT NULL DEFAULT '0',
address_list text,
update_time timestamp(6) NULL DEFAULT NULL::timestamp without time zone,
CONSTRAINT pk_xxl_job_group PRIMARY KEY (id)
);
COMMENT ON COLUMN lululemon.xxl_job_group.app_name IS '执行器AppName';
COMMENT ON COLUMN lululemon.xxl_job_group.title IS '执行器名称';
COMMENT ON COLUMN lululemon.xxl_job_group.address_type IS '执行器地址类型:0=自动注册、1=手动录入';
COMMENT ON COLUMN lululemon.xxl_job_group.address_list IS '执行器地址列表,多地址逗号分隔';
CREATE TABLE xxl_job_user (
id serial NOT NULL,
username varchar(50) NOT NULL,
password varchar(50) NOT NULL,
role int4 NOT NULL,
permission varchar(255) DEFAULT NULL,
CONSTRAINT pk_xxl_job_user PRIMARY KEY (id)
);
CREATE UNIQUE INDEX idx_xxl_job_user_username ON lululemon.xxl_job_user USING btree (username);
COMMENT ON COLUMN lululemon.xxl_job_user.role IS '角色:0-普通用户、1-管理员';
COMMENT ON COLUMN lululemon.xxl_job_user.permission IS '权限:执行器ID列表,多个逗号分割';
CREATE TABLE xxl_job_lock (
lock_name varchar(50) NOT NULL,
CONSTRAINT pk_xxl_job_lock PRIMARY KEY (lock_name)
);
COMMENT ON COLUMN lululemon.xxl_job_lock.lock_name IS '锁名称';
--测试数据添加
--INSERT INTO xxl_job_group(id, app_name, title, address_type, address_list, update_time) VALUES (1, 'crm-member-instance-job-executor', 'member执行器', 0, NULL, '2018-11-03 22:21:31' );
--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) VALUES
--(1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
--INSERT INTO xxl_job_user(id, username, password, role, permission) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
--INSERT INTO xxl_job_lock ( lock_name) VALUES ( 'schedule_lock');