From 420fa26802be9683608bb97ddbcaa39d4181c6de Mon Sep 17 00:00:00 2001 From: shanhy Date: Mon, 29 Jun 2020 10:41:29 +0800 Subject: [PATCH 01/16] =?UTF-8?q?oracle=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/db/tables_xxl_job_oracle.sql | 214 +++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 doc/db/tables_xxl_job_oracle.sql diff --git a/doc/db/tables_xxl_job_oracle.sql b/doc/db/tables_xxl_job_oracle.sql new file mode 100644 index 00000000..83fb5447 --- /dev/null +++ b/doc/db/tables_xxl_job_oracle.sql @@ -0,0 +1,214 @@ +/* + Target Server Type : Oracle + Date: 29/06/2020 10:24:23 +*/ + +-- ---------------------------- +-- Table structure for XXL_JOB_GROUP +-- ---------------------------- +DROP TABLE XXL_JOB_GROUP; +CREATE TABLE XXL_JOB_GROUP ( + ID NUMBER(11) NOT NULL , + APP_NAME NVARCHAR2(64) NOT NULL , + TITLE NVARCHAR2(12) NOT NULL , + ADDRESS_TYPE NUMBER(4) NOT NULL , + ADDRESS_LIST NVARCHAR2(512) +); +COMMENT ON COLUMN XXL_JOB_GROUP.APP_NAME IS '执行器AppName'; +COMMENT ON COLUMN XXL_JOB_GROUP.TITLE IS '执行器名称'; +COMMENT ON COLUMN XXL_JOB_GROUP.ADDRESS_TYPE IS '执行器地址类型:0=自动注册、1=手动录入'; +COMMENT ON COLUMN XXL_JOB_GROUP.ADDRESS_LIST IS '执行器地址列表,多地址逗号分隔'; + +-- ---------------------------- +-- Records of XXL_JOB_GROUP +-- ---------------------------- +INSERT INTO XXL_JOB_GROUP VALUES ('1', 'xxl-job-executor-sample', '示例执行器', '0', NULL); + +-- ---------------------------- +-- Primary Key structure for table XXL_JOB_GROUP +-- ---------------------------- +ALTER TABLE XXL_JOB_GROUP ADD CONSTRAINT SYS_C0026588 PRIMARY KEY (ID); + + +-- ---------------------------- +-- Table structure for XXL_JOB_INFO +-- ---------------------------- +DROP TABLE XXL_JOB_INFO; +CREATE TABLE XXL_JOB_INFO ( + ID NUMBER(11) NOT NULL , + JOB_GROUP NUMBER(11) NOT NULL , + JOB_CRON NVARCHAR2(128) NOT NULL , + JOB_DESC NVARCHAR2(255) NOT NULL , + ADD_TIME DATE , + UPDATE_TIME DATE , + AUTHOR NVARCHAR2(64) , + ALARM_EMAIL NVARCHAR2(255) , + EXECUTOR_ROUTE_STRATEGY NVARCHAR2(50) , + EXECUTOR_HANDLER NVARCHAR2(255) , + EXECUTOR_PARAM NVARCHAR2(512) , + EXECUTOR_BLOCK_STRATEGY NVARCHAR2(50) , + EXECUTOR_TIMEOUT NUMBER(11) NOT NULL , + EXECUTOR_FAIL_RETRY_COUNT NUMBER(11) NOT NULL , + GLUE_TYPE NVARCHAR2(50) NOT NULL , + GLUE_SOURCE NCLOB , + GLUE_REMARK NVARCHAR2(128) , + GLUE_UPDATETIME DATE , + CHILD_JOBID NVARCHAR2(255) , + TRIGGER_STATUS NUMBER(4) NOT NULL , + TRIGGER_LAST_TIME NUMBER(20) NOT NULL , + TRIGGER_NEXT_TIME NUMBER(20) NOT NULL +); +COMMENT ON COLUMN XXL_JOB_INFO.JOB_GROUP IS '执行器主键ID'; +COMMENT ON COLUMN XXL_JOB_INFO.JOB_CRON IS '任务执行CRON'; +COMMENT ON COLUMN XXL_JOB_INFO.AUTHOR IS '作者'; +COMMENT ON COLUMN XXL_JOB_INFO.ALARM_EMAIL IS '报警邮件'; +COMMENT ON COLUMN XXL_JOB_INFO.EXECUTOR_ROUTE_STRATEGY IS '执行器路由策略'; +COMMENT ON COLUMN XXL_JOB_INFO.EXECUTOR_HANDLER IS '执行器任务handler'; +COMMENT ON COLUMN XXL_JOB_INFO.EXECUTOR_PARAM IS '执行器任务参数'; +COMMENT ON COLUMN XXL_JOB_INFO.EXECUTOR_BLOCK_STRATEGY IS '阻塞处理策略'; +COMMENT ON COLUMN XXL_JOB_INFO.EXECUTOR_TIMEOUT IS '任务执行超时时间,单位秒'; +COMMENT ON COLUMN XXL_JOB_INFO.EXECUTOR_FAIL_RETRY_COUNT IS '失败重试次数'; +COMMENT ON COLUMN XXL_JOB_INFO.GLUE_TYPE IS 'GLUE类型'; +COMMENT ON COLUMN XXL_JOB_INFO.GLUE_SOURCE IS 'GLUE源代码'; +COMMENT ON COLUMN XXL_JOB_INFO.GLUE_REMARK IS 'GLUE备注'; +COMMENT ON COLUMN XXL_JOB_INFO.GLUE_UPDATETIME IS 'GLUE更新时间'; +COMMENT ON COLUMN XXL_JOB_INFO.CHILD_JOBID IS '子任务ID,多个逗号分隔'; +COMMENT ON COLUMN XXL_JOB_INFO.TRIGGER_STATUS IS '调度状态:0-停止,1-运行'; +COMMENT ON COLUMN XXL_JOB_INFO.TRIGGER_LAST_TIME IS '上次调度时间'; +COMMENT ON COLUMN XXL_JOB_INFO.TRIGGER_NEXT_TIME IS '下次调度时间'; + +-- ---------------------------- +-- Records of XXL_JOB_INFO +-- ---------------------------- +INSERT INTO XXL_JOB_INFO VALUES ('1', '1', '0 0 0 * * ? *', '测试任务1', TO_DATE('2018-11-03 22:21:31', 'SYYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-11-03 22:21:31', 'SYYYY-MM-DD HH24:MI:SS'), 'XXL', NULL, 'FIRST', 'demoJobHandler', NULL, 'SERIAL_EXECUTION', '0', '0', 'BEAN', NULL, 'GLUE代码初始化', TO_DATE('2018-11-03 22:21:31', 'SYYYY-MM-DD HH24:MI:SS'), NULL, '0', '0', '0'); + +-- ---------------------------- +-- Primary Key structure for table XXL_JOB_INFO +-- ---------------------------- +ALTER TABLE XXL_JOB_INFO ADD CONSTRAINT SYS_C0026589 PRIMARY KEY (ID); + + +-- ---------------------------- +-- Table structure for XXL_JOB_LOCK +-- ---------------------------- +DROP TABLE XXL_JOB_LOCK; +CREATE TABLE XXL_JOB_LOCK ( + LOCK_NAME NVARCHAR2(50) NOT NULL +); +COMMENT ON COLUMN XXL_JOB_LOCK.LOCK_NAME IS '锁名称'; + +-- ---------------------------- +-- Records of XXL_JOB_LOCK +-- ---------------------------- +INSERT INTO XXL_JOB_LOCK VALUES ('schedule_lock'); + + +-- ---------------------------- +-- Table structure for XXL_JOB_LOG_REPORT +-- ---------------------------- +DROP TABLE XXL_JOB_LOG_REPORT; +CREATE TABLE XXL_JOB_LOG_REPORT ( + ID NUMBER(11) NOT NULL , + TRIGGER_DAY DATE , + RUNNING_COUNT NUMBER(11) NOT NULL , + SUC_COUNT NUMBER(11) NOT NULL , + FAIL_COUNT NUMBER(11) NOT NULL +); +COMMENT ON COLUMN XXL_JOB_LOG_REPORT.TRIGGER_DAY IS '调度-时间'; +COMMENT ON COLUMN XXL_JOB_LOG_REPORT.RUNNING_COUNT IS '运行中-日志数量'; +COMMENT ON COLUMN XXL_JOB_LOG_REPORT.SUC_COUNT IS '执行成功-日志数量'; +COMMENT ON COLUMN XXL_JOB_LOG_REPORT.FAIL_COUNT IS '执行失败-日志数量'; + +-- ---------------------------- +-- Primary Key structure for table XXL_JOB_LOG_REPORT +-- ---------------------------- +ALTER TABLE XXL_JOB_LOG_REPORT ADD CONSTRAINT SYS_C0026592 PRIMARY KEY (ID); + +-- ---------------------------- +-- Indexes structure for table XXL_JOB_LOG_REPORT +-- ---------------------------- +CREATE UNIQUE INDEX I_TRIGGER_DAY + ON XXL_JOB_LOG_REPORT (TRIGGER_DAY ASC); + + +-- ---------------------------- +-- Table structure for XXL_JOB_LOGGLUE +-- ---------------------------- +DROP TABLE XXL_JOB_LOGGLUE; +CREATE TABLE XXL_JOB_LOGGLUE ( + ID NUMBER(11) NOT NULL , + JOB_ID NUMBER(11) NOT NULL , + GLUE_TYPE NVARCHAR2(50) , + GLUE_SOURCE NCLOB , + GLUE_REMARK NVARCHAR2(128) NOT NULL , + ADD_TIME DATE , + UPDATE_TIME DATE +); +COMMENT ON COLUMN XXL_JOB_LOGGLUE.JOB_ID IS '任务,主键ID'; +COMMENT ON COLUMN XXL_JOB_LOGGLUE.GLUE_TYPE IS 'GLUE类型'; +COMMENT ON COLUMN XXL_JOB_LOGGLUE.GLUE_SOURCE IS 'GLUE源代码'; +COMMENT ON COLUMN XXL_JOB_LOGGLUE.GLUE_REMARK IS 'GLUE备注'; + +-- ---------------------------- +-- Primary Key structure for table XXL_JOB_LOGGLUE +-- ---------------------------- +ALTER TABLE XXL_JOB_LOGGLUE ADD CONSTRAINT SYS_C0026593 PRIMARY KEY (ID); + + + +-- ---------------------------- +-- Table structure for XXL_JOB_REGISTRY +-- ---------------------------- +DROP TABLE XXL_JOB_REGISTRY; +CREATE TABLE XXL_JOB_REGISTRY ( + ID NUMBER(11) NOT NULL , + REGISTRY_GROUP NVARCHAR2(50) NOT NULL , + REGISTRY_KEY NVARCHAR2(255) NOT NULL , + REGISTRY_VALUE NVARCHAR2(255) NOT NULL , + UPDATE_TIME DATE +); + +-- ---------------------------- +-- Primary Key structure for table XXL_JOB_REGISTRY +-- ---------------------------- +ALTER TABLE XXL_JOB_REGISTRY ADD CONSTRAINT SYS_C0026594 PRIMARY KEY (ID); + +-- ---------------------------- +-- Indexes structure for table XXL_JOB_REGISTRY +-- ---------------------------- +CREATE INDEX I_G_K_V + ON XXL_JOB_REGISTRY (REGISTRY_GROUP ASC, REGISTRY_VALUE ASC, REGISTRY_KEY ASC); + + + +-- ---------------------------- +-- Table structure for XXL_JOB_USER +-- ---------------------------- +DROP TABLE XXL_JOB_USER; +CREATE TABLE XXL_JOB_USER ( + ID NUMBER(11) NOT NULL , + USERNAME NVARCHAR2(50) NOT NULL , + PASSWORD NVARCHAR2(50) NOT NULL , + ROLE NUMBER(4) NOT NULL , + PERMISSION NVARCHAR2(255) +); +COMMENT ON COLUMN XXL_JOB_USER.USERNAME IS '账号'; +COMMENT ON COLUMN XXL_JOB_USER.PASSWORD IS '密码'; +COMMENT ON COLUMN XXL_JOB_USER.ROLE IS '角色:0-普通用户、1-管理员'; +COMMENT ON COLUMN XXL_JOB_USER.PERMISSION IS '权限:执行器ID列表,多个逗号分割'; + +-- ---------------------------- +-- Records of XXL_JOB_USER +-- ---------------------------- +INSERT INTO XXL_JOB_USER VALUES ('1', 'admin', 'e10adc3949ba59abbe56e057f20f883e', '1', NULL); + +-- ---------------------------- +-- Primary Key structure for table XXL_JOB_USER +-- ---------------------------- +ALTER TABLE XXL_JOB_USER ADD CONSTRAINT SYS_C0026595 PRIMARY KEY (ID); + +-- ---------------------------- +-- Indexes structure for table XXL_JOB_USER +-- ---------------------------- +CREATE UNIQUE INDEX I_USERNAME + ON XXL_JOB_USER (USERNAME ASC); From 51c6ec8ee8db37bedacfa075bf7427ebc5200bc5 Mon Sep 17 00:00:00 2001 From: shanhy Date: Mon, 29 Jun 2020 10:50:24 +0800 Subject: [PATCH 02/16] =?UTF-8?q?=E7=BC=BA=E5=A4=B1LOG=E8=A1=A8=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/db/tables_xxl_job_oracle.sql | 49 ++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/doc/db/tables_xxl_job_oracle.sql b/doc/db/tables_xxl_job_oracle.sql index 83fb5447..0a288ae2 100644 --- a/doc/db/tables_xxl_job_oracle.sql +++ b/doc/db/tables_xxl_job_oracle.sql @@ -103,6 +103,55 @@ COMMENT ON COLUMN XXL_JOB_LOCK.LOCK_NAME IS '锁名称'; INSERT INTO XXL_JOB_LOCK VALUES ('schedule_lock'); +-- ---------------------------- +-- Table structure for XXL_JOB_LOG +-- ---------------------------- +DROP TABLE XXL_JOB_LOG; +CREATE TABLE XXL_JOB_LOG ( + ID NUMBER(20) NOT NULL , + JOB_GROUP NUMBER(11) NOT NULL , + JOB_ID NUMBER(11) NOT NULL , + EXECUTOR_ADDRESS NVARCHAR2(255) , + EXECUTOR_HANDLER NVARCHAR2(255) , + EXECUTOR_PARAM NVARCHAR2(512) , + EXECUTOR_SHARDING_PARAM NVARCHAR2(20) , + EXECUTOR_FAIL_RETRY_COUNT NUMBER(11) NOT NULL , + TRIGGER_TIME DATE , + TRIGGER_CODE NUMBER(11) NOT NULL , + TRIGGER_MSG NCLOB , + HANDLE_TIME DATE , + HANDLE_CODE NUMBER(11) NOT NULL , + HANDLE_MSG NCLOB , + ALARM_STATUS NUMBER(4) NOT NULL +); +COMMENT ON COLUMN XXL_JOB_LOG.JOB_GROUP IS '执行器主键ID'; +COMMENT ON COLUMN XXL_JOB_LOG.JOB_ID IS '任务,主键ID'; +COMMENT ON COLUMN XXL_JOB_LOG.EXECUTOR_ADDRESS IS '执行器地址,本次执行的地址'; +COMMENT ON COLUMN XXL_JOB_LOG.EXECUTOR_HANDLER IS '执行器任务handler'; +COMMENT ON COLUMN XXL_JOB_LOG.EXECUTOR_PARAM IS '执行器任务参数'; +COMMENT ON COLUMN XXL_JOB_LOG.EXECUTOR_SHARDING_PARAM IS '执行器任务分片参数,格式如 1/2'; +COMMENT ON COLUMN XXL_JOB_LOG.EXECUTOR_FAIL_RETRY_COUNT IS '失败重试次数'; +COMMENT ON COLUMN XXL_JOB_LOG.TRIGGER_TIME IS '调度-时间'; +COMMENT ON COLUMN XXL_JOB_LOG.TRIGGER_CODE IS '调度-结果'; +COMMENT ON COLUMN XXL_JOB_LOG.TRIGGER_MSG IS '调度-日志'; +COMMENT ON COLUMN XXL_JOB_LOG.HANDLE_TIME IS '执行-时间'; +COMMENT ON COLUMN XXL_JOB_LOG.HANDLE_CODE IS '执行-状态'; +COMMENT ON COLUMN XXL_JOB_LOG.HANDLE_MSG IS '执行-日志'; +COMMENT ON COLUMN XXL_JOB_LOG.ALARM_STATUS IS '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败'; + +-- ---------------------------- +-- Primary Key structure for table XXL_JOB_LOG +-- ---------------------------- +ALTER TABLE XXL_JOB_LOG ADD CONSTRAINT SYS_C0026591 PRIMARY KEY (ID); + +-- ---------------------------- +-- Indexes structure for table XXL_JOB_LOG +-- ---------------------------- +CREATE INDEX I_HANDLE_CODE + ON XXL_JOB_LOG (HANDLE_CODE ASC); +CREATE INDEX I_TRIGGER_TIME + ON XXL_JOB_LOG (TRIGGER_TIME ASC); + -- ---------------------------- -- Table structure for XXL_JOB_LOG_REPORT -- ---------------------------- From 58dd7621bf417101f4e0ef1d62361a797711b7de Mon Sep 17 00:00:00 2001 From: shanhy Date: Mon, 29 Jun 2020 20:40:43 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/db/tables_xxl_job_oracle.sql | 33 ++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/doc/db/tables_xxl_job_oracle.sql b/doc/db/tables_xxl_job_oracle.sql index 0a288ae2..ca2eb85e 100644 --- a/doc/db/tables_xxl_job_oracle.sql +++ b/doc/db/tables_xxl_job_oracle.sql @@ -261,3 +261,36 @@ ALTER TABLE XXL_JOB_USER ADD CONSTRAINT SYS_C0026595 PRIMARY KEY (ID); -- ---------------------------- CREATE UNIQUE INDEX I_USERNAME ON XXL_JOB_USER (USERNAME ASC); + + +-- ---------------------------- +-- Table structure for XXL_JOB_MACHINE +-- ---------------------------- +DROP TABLE XXL_JOB_MACHINE; +CREATE TABLE XXL_JOB_MACHINE ( + MACHINE_IP NVARCHAR2(16) NOT NULL , + MACHINE_ID NUMBER(11) NOT NULL , + ADD_TIME DATE NOT NULL , + HEART_LAST_TIME DATE NOT NULL +) +TABLESPACE UPMS +LOGGING +NOCOMPRESS +PCTFREE 10 +INITRANS 1 +STORAGE ( + BUFFER_POOL DEFAULT +) +PARALLEL 1 +NOCACHE +DISABLE ROW MOVEMENT +; +COMMENT ON COLUMN XXL_JOB_MACHINE.MACHINE_IP IS '主机IP'; +COMMENT ON COLUMN XXL_JOB_MACHINE.MACHINE_ID IS '主机IP对应的机器码'; +COMMENT ON COLUMN XXL_JOB_MACHINE.ADD_TIME IS '创建时间'; +COMMENT ON COLUMN XXL_JOB_MACHINE.HEART_LAST_TIME IS '最后一次心跳时间'; + +-- ---------------------------- +-- Primary Key structure for table XXL_JOB_MACHINE +-- ---------------------------- +ALTER TABLE XXL_JOB_MACHINE ADD CONSTRAINT SYS_C0026684 PRIMARY KEY (MACHINE_IP); From 4250cb1f14b776812213164eb56d727c9ceded2d Mon Sep 17 00:00:00 2001 From: zhangjf <1204698504@qq.com> Date: Mon, 29 Jun 2020 20:40:47 +0800 Subject: [PATCH 04/16] =?UTF-8?q?=E8=84=9A=E6=9C=AC=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/db/tables_xxl_job.sql | 20 ++++++++++----- doc/db/tables_xxl_job_oracle.sql | 44 +++++++++++++++++++++++++++----- 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index 52e015c4..dc4309c5 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -8,7 +8,7 @@ use `xxl_job`; SET NAMES utf8mb4; CREATE TABLE `xxl_job_info` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL AUTO_INCREMENT, `job_group` int(11) NOT NULL COMMENT '执行器主键ID', `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON', `job_desc` varchar(255) NOT NULL, @@ -55,7 +55,7 @@ CREATE TABLE `xxl_job_log` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_log_report` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL AUTO_INCREMENT, `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间', `running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量', `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量', @@ -65,7 +65,7 @@ CREATE TABLE `xxl_job_log_report` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_logglue` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL AUTO_INCREMENT, `job_id` int(11) NOT NULL COMMENT '任务,主键ID', `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型', `glue_source` mediumtext COMMENT 'GLUE源代码', @@ -76,7 +76,7 @@ CREATE TABLE `xxl_job_logglue` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_registry` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL AUTO_INCREMENT, `registry_group` varchar(50) NOT NULL, `registry_key` varchar(255) NOT NULL, `registry_value` varchar(255) NOT NULL, @@ -86,7 +86,7 @@ CREATE TABLE `xxl_job_registry` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_group` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL AUTO_INCREMENT, `app_name` varchar(64) NOT NULL COMMENT '执行器AppName', `title` varchar(12) NOT NULL COMMENT '执行器名称', `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入', @@ -95,7 +95,7 @@ CREATE TABLE `xxl_job_group` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_user` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL COMMENT '账号', `password` varchar(50) NOT NULL COMMENT '密码', `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员', @@ -109,6 +109,14 @@ CREATE TABLE `xxl_job_lock` ( PRIMARY KEY (`lock_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE `xxl_job_machine` ( + `machine_ip` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主机IP', + `machine_id` int(11) NOT NULL COMMENT '主机IP对应的机器码', + `add_time` datetime NOT NULL COMMENT '创建时间', + `heart_last_time` datetime NOT NULL COMMENT '最后一次心跳时间', + PRIMARY KEY (`machine_ip`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL); INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_cron`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `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, '0 0 0 * * ? *', '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', ''); diff --git a/doc/db/tables_xxl_job_oracle.sql b/doc/db/tables_xxl_job_oracle.sql index 0a288ae2..6f8569f6 100644 --- a/doc/db/tables_xxl_job_oracle.sql +++ b/doc/db/tables_xxl_job_oracle.sql @@ -8,7 +8,7 @@ -- ---------------------------- DROP TABLE XXL_JOB_GROUP; CREATE TABLE XXL_JOB_GROUP ( - ID NUMBER(11) NOT NULL , + ID NUMBER(20) NOT NULL , APP_NAME NVARCHAR2(64) NOT NULL , TITLE NVARCHAR2(12) NOT NULL , ADDRESS_TYPE NUMBER(4) NOT NULL , @@ -35,7 +35,7 @@ ALTER TABLE XXL_JOB_GROUP ADD CONSTRAINT SYS_C0026588 PRIMARY KEY (ID); -- ---------------------------- DROP TABLE XXL_JOB_INFO; CREATE TABLE XXL_JOB_INFO ( - ID NUMBER(11) NOT NULL , + ID NUMBER(20) NOT NULL , JOB_GROUP NUMBER(11) NOT NULL , JOB_CRON NVARCHAR2(128) NOT NULL , JOB_DESC NVARCHAR2(255) NOT NULL , @@ -157,7 +157,7 @@ CREATE INDEX I_TRIGGER_TIME -- ---------------------------- DROP TABLE XXL_JOB_LOG_REPORT; CREATE TABLE XXL_JOB_LOG_REPORT ( - ID NUMBER(11) NOT NULL , + ID NUMBER(20) NOT NULL , TRIGGER_DAY DATE , RUNNING_COUNT NUMBER(11) NOT NULL , SUC_COUNT NUMBER(11) NOT NULL , @@ -185,8 +185,8 @@ CREATE UNIQUE INDEX I_TRIGGER_DAY -- ---------------------------- DROP TABLE XXL_JOB_LOGGLUE; CREATE TABLE XXL_JOB_LOGGLUE ( - ID NUMBER(11) NOT NULL , - JOB_ID NUMBER(11) NOT NULL , + ID NUMBER(20) NOT NULL , + JOB_ID NUMBER(20) NOT NULL , GLUE_TYPE NVARCHAR2(50) , GLUE_SOURCE NCLOB , GLUE_REMARK NVARCHAR2(128) NOT NULL , @@ -210,7 +210,7 @@ ALTER TABLE XXL_JOB_LOGGLUE ADD CONSTRAINT SYS_C0026593 PRIMARY KEY (ID); -- ---------------------------- DROP TABLE XXL_JOB_REGISTRY; CREATE TABLE XXL_JOB_REGISTRY ( - ID NUMBER(11) NOT NULL , + ID NUMBER(20) NOT NULL , REGISTRY_GROUP NVARCHAR2(50) NOT NULL , REGISTRY_KEY NVARCHAR2(255) NOT NULL , REGISTRY_VALUE NVARCHAR2(255) NOT NULL , @@ -235,7 +235,7 @@ CREATE INDEX I_G_K_V -- ---------------------------- DROP TABLE XXL_JOB_USER; CREATE TABLE XXL_JOB_USER ( - ID NUMBER(11) NOT NULL , + ID NUMBER(20) NOT NULL , USERNAME NVARCHAR2(50) NOT NULL , PASSWORD NVARCHAR2(50) NOT NULL , ROLE NUMBER(4) NOT NULL , @@ -261,3 +261,33 @@ ALTER TABLE XXL_JOB_USER ADD CONSTRAINT SYS_C0026595 PRIMARY KEY (ID); -- ---------------------------- CREATE UNIQUE INDEX I_USERNAME ON XXL_JOB_USER (USERNAME ASC); + + + +-- ---------------------------- +-- Table structure for XXL_JOB_MACHINE +-- ---------------------------- +DROP TABLE XXL_JOB_MACHINE; +CREATE TABLE XXL_JOB_MACHINE ( + MACHINE_IP NVARCHAR2(16) NOT NULL , + MACHINE_ID NUMBER(11) NOT NULL , + ADD_TIME DATE NOT NULL , + HEART_LAST_TIME DATE NOT NULL +); +COMMENT ON COLUMN XXL_JOB_MACHINE.MACHINE_IP IS '主机IP'; +COMMENT ON COLUMN XXL_JOB_MACHINE.MACHINE_ID IS '主机IP对应的机器码'; +COMMENT ON COLUMN XXL_JOB_MACHINE.ADD_TIME IS '创建时间'; +COMMENT ON COLUMN XXL_JOB_MACHINE.HEART_LAST_TIME IS '最后一次心跳时间'; + +-- ---------------------------- +-- Primary Key structure for table XXL_JOB_MACHINE +-- ---------------------------- +ALTER TABLE XXL_JOB_MACHINE ADD CONSTRAINT SYS_C0026684 PRIMARY KEY (MACHINE_IP); + +-- ---------------------------- +-- Checks structure for table XXL_JOB_MACHINE +-- ---------------------------- +ALTER TABLE XXL_JOB_MACHINE ADD CONSTRAINT SYS_C0026680 CHECK (MACHINE_IP IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE; +ALTER TABLE XXL_JOB_MACHINE ADD CONSTRAINT SYS_C0026681 CHECK (MACHINE_ID IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE; +ALTER TABLE XXL_JOB_MACHINE ADD CONSTRAINT SYS_C0026682 CHECK (ADD_TIME IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE; +ALTER TABLE XXL_JOB_MACHINE ADD CONSTRAINT SYS_C0026683 CHECK (HEART_LAST_TIME IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE; From cd2c83564cc00d19dfe9d782e118de1fd8253685 Mon Sep 17 00:00:00 2001 From: zhangjf <1204698504@qq.com> Date: Fri, 3 Jul 2020 13:23:47 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E9=80=82=E9=85=8DOracle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 + xxl-job-admin/pom.xml | 7 + .../admin/controller/JobCodeController.java | 14 +- .../admin/controller/JobGroupController.java | 22 +- .../admin/controller/JobInfoController.java | 14 +- .../admin/controller/JobLogController.java | 27 ++- .../job/admin/controller/UserController.java | 19 +- .../admin/core/alarm/impl/EmailJobAlarm.java | 2 +- .../admin/core/conf/XxlJobAdminConfig.java | 6 + .../xxl/job/admin/core/model/XxlJobGroup.java | 6 +- .../xxl/job/admin/core/model/XxlJobInfo.java | 12 +- .../xxl/job/admin/core/model/XxlJobLog.java | 12 +- .../job/admin/core/model/XxlJobLogGlue.java | 12 +- .../job/admin/core/model/XxlJobLogReport.java | 6 +- .../job/admin/core/model/XxlJobRegistry.java | 6 +- .../xxl/job/admin/core/model/XxlJobUser.java | 8 +- .../strategy/ExecutorRouteConsistentHash.java | 2 +- .../core/route/strategy/ExecutorRouteLFU.java | 4 +- .../core/route/strategy/ExecutorRouteLRU.java | 4 +- .../route/strategy/ExecutorRouteRound.java | 4 +- .../core/thread/JobFailMonitorHelper.java | 4 +- .../admin/core/thread/JobLogReportHelper.java | 6 +- .../core/thread/JobRegistryMonitorHelper.java | 9 +- .../admin/core/thread/JobScheduleHelper.java | 20 +- .../core/thread/JobTriggerPoolHelper.java | 9 +- .../job/admin/core/trigger/XxlJobTrigger.java | 11 +- .../com/xxl/job/admin/dao/XxlJobGroupDao.java | 12 +- .../com/xxl/job/admin/dao/XxlJobInfoDao.java | 14 +- .../com/xxl/job/admin/dao/XxlJobLogDao.java | 26 ++- .../xxl/job/admin/dao/XxlJobLogGlueDao.java | 8 +- .../xxl/job/admin/dao/XxlJobLogReportDao.java | 2 +- .../xxl/job/admin/dao/XxlJobRegistryDao.java | 11 +- .../com/xxl/job/admin/dao/XxlJobUserDao.java | 15 +- .../xxl/job/admin/service/XxlJobService.java | 8 +- .../job/admin/service/impl/AdminBizImpl.java | 5 +- .../admin/service/impl/XxlJobServiceImpl.java | 23 ++- .../src/main/resources/application.properties | 25 ++- .../mybatis-mapper/XxlJobGroupMapper.xml | 57 +++--- .../mybatis-mapper/XxlJobInfoMapper.xml | 96 ++++----- .../mybatis-mapper/XxlJobLogGlueMapper.xml | 68 ++++--- .../mybatis-mapper/XxlJobLogMapper.xml | 189 +++++++++--------- .../mybatis-mapper/XxlJobLogReportMapper.xml | 42 ++-- .../mybatis-mapper/XxlJobRegistryMapper.xml | 38 ++-- .../mybatis-mapper/XxlJobUserMapper.xml | 33 +-- .../xxl/job/admin/dao/XxlJobInfoDaoTest.java | 4 +- .../xxl/job/admin/dao/XxlJobLogDaoTest.java | 8 +- .../job/admin/dao/XxlJobLogGlueDaoTest.java | 5 +- .../job/admin/dao/XxlJobRegistryDaoTest.java | 11 +- .../xxl/job/executorbiz/ExecutorBizTest.java | 4 +- xxl-job-core/pom.xml | 7 + .../xxl/job/core/biz/model/IdleBeatParam.java | 8 +- .../com/xxl/job/core/biz/model/KillParam.java | 8 +- .../xxl/job/core/biz/model/TriggerParam.java | 6 +- .../xxl/job/core/executor/XxlJobExecutor.java | 10 +- .../core/handler/impl/ScriptJobHandler.java | 4 +- .../com/xxl/job/core/thread/JobThread.java | 4 +- .../java/com/xxl/job/core/util/DateUtil.java | 4 + 57 files changed, 562 insertions(+), 440 deletions(-) diff --git a/pom.xml b/pom.xml index 565a93c4..f433df46 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,7 @@ 2.1.2 8.0.19 + 1.2.12 1.7.30 4.13 diff --git a/xxl-job-admin/pom.xml b/xxl-job-admin/pom.xml index f1646528..840110ac 100644 --- a/xxl-job-admin/pom.xml +++ b/xxl-job-admin/pom.xml @@ -66,6 +66,13 @@ ${mysql-connector-java.version} + + + com.oracle + ojdbc7 + 12.1.0.2 + + com.xuxueli diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java index 302b9bf9..29cfb9ae 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java @@ -1,5 +1,7 @@ package com.xxl.job.admin.controller; +import com.github.pagehelper.PageHelper; +import com.xxl.job.admin.core.id.GenerateId; import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.model.XxlJobLogGlue; import com.xxl.job.admin.core.util.I18nUtil; @@ -30,8 +32,11 @@ public class JobCodeController { @Resource private XxlJobLogGlueDao xxlJobLogGlueDao; + @Resource + private GenerateId generateId; + @RequestMapping - public String index(HttpServletRequest request, Model model, int jobId) { + public String index(HttpServletRequest request, Model model, long jobId) { XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId); List jobLogGlues = xxlJobLogGlueDao.findByJobId(jobId); @@ -55,7 +60,7 @@ public class JobCodeController { @RequestMapping("/save") @ResponseBody - public ReturnT save(Model model, int id, String glueSource, String glueRemark) { + public ReturnT save(Model model, long id, String glueSource, String glueRemark) { // valid if (glueRemark==null) { return new ReturnT(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_glue_remark")) ); @@ -85,10 +90,13 @@ public class JobCodeController { xxlJobLogGlue.setAddTime(new Date()); xxlJobLogGlue.setUpdateTime(new Date()); + xxlJobLogGlue.setId(generateId.getId()); xxlJobLogGlueDao.save(xxlJobLogGlue); // remove code backup more than 30 - xxlJobLogGlueDao.removeOld(exists_jobInfo.getId(), 30); + PageHelper.startPage(1,30); + List ids = xxlJobLogGlueDao.findIds(exists_jobInfo.getId()); + xxlJobLogGlueDao.removeOld(exists_jobInfo.getId(), ids); return ReturnT.SUCCESS; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java index f1d1168a..1f390064 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java @@ -1,5 +1,7 @@ package com.xxl.job.admin.controller; +import com.github.pagehelper.PageHelper; +import com.xxl.job.admin.core.id.GenerateId; import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.core.model.XxlJobRegistry; import com.xxl.job.admin.core.util.I18nUtil; @@ -8,6 +10,7 @@ import com.xxl.job.admin.dao.XxlJobInfoDao; import com.xxl.job.admin.dao.XxlJobRegistryDao; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.enums.RegistryConfig; +import com.xxl.job.core.util.DateUtil; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @@ -32,6 +35,8 @@ public class JobGroupController { public XxlJobGroupDao xxlJobGroupDao; @Resource private XxlJobRegistryDao xxlJobRegistryDao; + @Resource + private GenerateId generateId; @RequestMapping public String index(Model model) { @@ -45,9 +50,10 @@ public class JobGroupController { @RequestParam(required = false, defaultValue = "10") int length, String appname, String title) { + PageHelper.startPage(start/length+1,length); // page query - List list = xxlJobGroupDao.pageList(start, length, appname, title); - int list_count = xxlJobGroupDao.pageListCount(start, length, appname, title); + List list = xxlJobGroupDao.pageList(appname, title); + int list_count = xxlJobGroupDao.pageListCount(appname, title); // package result Map maps = new HashMap(); @@ -82,7 +88,7 @@ public class JobGroupController { } } } - + xxlJobGroup.setId(generateId.getId()); int ret = xxlJobGroupDao.save(xxlJobGroup); return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL; } @@ -132,7 +138,8 @@ public class JobGroupController { private List findRegistryByAppName(String appnameParam){ HashMap> appAddressMap = new HashMap>(); - List list = xxlJobRegistryDao.findAll(RegistryConfig.DEAD_TIMEOUT, new Date()); + Date date = DateUtil.addSecond(new Date(), -RegistryConfig.DEAD_TIMEOUT); + List list = xxlJobRegistryDao.findAll(date); if (list != null) { for (XxlJobRegistry item: list) { if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) { @@ -154,10 +161,11 @@ public class JobGroupController { @RequestMapping("/remove") @ResponseBody - public ReturnT remove(int id){ + public ReturnT remove(long id){ // valid - int count = xxlJobInfoDao.pageListCount(0, 10, id, -1, null, null, null); + PageHelper.startPage(1,10); + int count = xxlJobInfoDao.pageListCount(id, -1, null, null, null); if (count > 0) { return new ReturnT(500, I18nUtil.getString("jobgroup_del_limit_0") ); } @@ -173,7 +181,7 @@ public class JobGroupController { @RequestMapping("/loadById") @ResponseBody - public ReturnT loadById(int id){ + public ReturnT loadById(long id){ XxlJobGroup jobGroup = xxlJobGroupDao.load(id); return jobGroup!=null?new ReturnT(jobGroup):new ReturnT(ReturnT.FAIL_CODE, null); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java index 3cf8029a..74beb454 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java @@ -41,7 +41,7 @@ public class JobInfoController { private XxlJobService xxlJobService; @RequestMapping - public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "-1") int jobGroup) { + public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "-1") long jobGroup) { // 枚举-字典 model.addAttribute("ExecutorRouteStrategyEnum", ExecutorRouteStrategyEnum.values()); // 路由策略-列表 @@ -83,7 +83,7 @@ public class JobInfoController { } return jobGroupList; } - public static void validPermission(HttpServletRequest request, int jobGroup) { + public static void validPermission(HttpServletRequest request, long jobGroup) { XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY); if (!loginUser.validPermission(jobGroup)) { throw new RuntimeException(I18nUtil.getString("system_permission_limit") + "[username="+ loginUser.getUsername() +"]"); @@ -94,7 +94,7 @@ public class JobInfoController { @ResponseBody public Map pageList(@RequestParam(required = false, defaultValue = "0") int start, @RequestParam(required = false, defaultValue = "10") int length, - int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) { + long jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) { return xxlJobService.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author); } @@ -113,26 +113,26 @@ public class JobInfoController { @RequestMapping("/remove") @ResponseBody - public ReturnT remove(int id) { + public ReturnT remove(long id) { return xxlJobService.remove(id); } @RequestMapping("/stop") @ResponseBody - public ReturnT pause(int id) { + public ReturnT pause(long id) { return xxlJobService.stop(id); } @RequestMapping("/start") @ResponseBody - public ReturnT start(int id) { + public ReturnT start(long id) { return xxlJobService.start(id); } @RequestMapping("/trigger") @ResponseBody //@PermissionLimit(limit = false) - public ReturnT triggerJob(int id, String executorParam, String addressList) { + public ReturnT triggerJob(long id, String executorParam, String addressList) { // force cover job param if (executorParam == null) { executorParam = ""; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java index 70e62ae8..735e851d 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java @@ -1,5 +1,6 @@ package com.xxl.job.admin.controller; +import com.github.pagehelper.PageHelper; import com.xxl.job.admin.core.exception.XxlJobException; import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.core.model.XxlJobInfo; @@ -47,7 +48,7 @@ public class JobLogController { public XxlJobLogDao xxlJobLogDao; @RequestMapping - public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "0") Integer jobId) { + public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "0") Long jobId) { // 执行器列表 List jobGroupList_all = xxlJobGroupDao.findAll(); @@ -78,7 +79,7 @@ public class JobLogController { @RequestMapping("/getJobsByGroup") @ResponseBody - public ReturnT> getJobsByGroup(int jobGroup){ + public ReturnT> getJobsByGroup(long jobGroup){ List list = xxlJobInfoDao.getJobsByGroup(jobGroup); return new ReturnT>(list); } @@ -88,7 +89,7 @@ public class JobLogController { public Map pageList(HttpServletRequest request, @RequestParam(required = false, defaultValue = "0") int start, @RequestParam(required = false, defaultValue = "10") int length, - int jobGroup, int jobId, int logStatus, String filterTime) { + long jobGroup, long jobId, int logStatus, String filterTime) { // valid permission JobInfoController.validPermission(request, jobGroup); // 仅管理员支持查询全部;普通用户仅支持查询有权限的 jobGroup @@ -105,8 +106,9 @@ public class JobLogController { } // page query - List list = xxlJobLogDao.pageList(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus); - int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus); + PageHelper.startPage(start/length+1,length); + List list = xxlJobLogDao.pageList(jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus); + int list_count = xxlJobLogDao.pageListCount(jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus); // package result Map maps = new HashMap(); @@ -117,7 +119,7 @@ public class JobLogController { } @RequestMapping("/logDetailPage") - public String logDetailPage(int id, Model model){ + public String logDetailPage(long id, Model model){ // base check ReturnT logStatue = ReturnT.SUCCESS; @@ -158,7 +160,7 @@ public class JobLogController { @RequestMapping("/logKill") @ResponseBody - public ReturnT logKill(int id){ + public ReturnT logKill(long id){ // base check XxlJobLog log = xxlJobLogDao.load(id); XxlJobInfo jobInfo = xxlJobInfoDao.loadById(log.getJobId()); @@ -192,7 +194,7 @@ public class JobLogController { @RequestMapping("/clearLog") @ResponseBody - public ReturnT clearLog(int jobGroup, int jobId, int type){ + public ReturnT clearLog(long jobGroup, long jobId, int type){ Date clearBeforeTime = null; int clearBeforeNum = 0; @@ -214,13 +216,20 @@ public class JobLogController { clearBeforeNum = 100000; // 清理十万条以前日志数据 } else if (type == 9) { clearBeforeNum = 0; // 清理所有日志数据 + } else { return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_clean_type_unvalid")); } List logIds = null; + List recentLogIds = null; do { - logIds = xxlJobLogDao.findClearLogIds(jobGroup, jobId, clearBeforeTime, clearBeforeNum, 1000); + if(clearBeforeNum > 0){ + PageHelper.startPage(1,clearBeforeNum); + recentLogIds = xxlJobLogDao.findRecentLogs(jobGroup,jobId); + } + PageHelper.startPage(1,1000); + logIds = xxlJobLogDao.findClearLogIds(jobGroup, jobId, clearBeforeTime,recentLogIds); if (logIds!=null && logIds.size()>0) { xxlJobLogDao.clearLog(logIds); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/UserController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/UserController.java index 573ffccf..388ff5e7 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/UserController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/UserController.java @@ -1,10 +1,14 @@ package com.xxl.job.admin.controller; +import com.github.pagehelper.PageHelper; import com.xxl.job.admin.controller.annotation.PermissionLimit; +import com.xxl.job.admin.core.id.GenerateId; import com.xxl.job.admin.core.model.XxlJobGroup; +import com.xxl.job.admin.core.model.XxlJobLogGlue; import com.xxl.job.admin.core.model.XxlJobUser; import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.dao.XxlJobGroupDao; +import com.xxl.job.admin.dao.XxlJobLogGlueDao; import com.xxl.job.admin.dao.XxlJobUserDao; import com.xxl.job.admin.service.LoginService; import com.xxl.job.core.biz.model.ReturnT; @@ -18,6 +22,7 @@ import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,6 +38,10 @@ public class UserController { private XxlJobUserDao xxlJobUserDao; @Resource private XxlJobGroupDao xxlJobGroupDao; + @Resource + private GenerateId generateId; + @Resource + private XxlJobLogGlueDao xxlJobLogGlueDao; @RequestMapping @PermissionLimit(adminuser = true) @@ -52,9 +61,11 @@ public class UserController { @RequestParam(required = false, defaultValue = "10") int length, String username, int role) { + PageHelper.startPage(start/length+1,length); // page list - List list = xxlJobUserDao.pageList(start, length, username, role); - int list_count = xxlJobUserDao.pageListCount(start, length, username, role); + List list = xxlJobUserDao.pageList(username, role); + + int list_count = xxlJobUserDao.pageListCount(username, role); // package result Map maps = new HashMap(); @@ -94,6 +105,8 @@ public class UserController { return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("user_username_repeat") ); } + xxlJobUser.setId(generateId.getId()); + // write xxlJobUserDao.save(xxlJobUser); return ReturnT.SUCCESS; @@ -130,7 +143,7 @@ public class UserController { @RequestMapping("/remove") @ResponseBody @PermissionLimit(adminuser = true) - public ReturnT remove(HttpServletRequest request, int id) { + public ReturnT remove(HttpServletRequest request, long id) { // avoid opt login seft XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java index fe16fbdf..08836e91 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java @@ -48,7 +48,7 @@ public class EmailJobAlarm implements JobAlarm { } // email info - XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(Integer.valueOf(info.getJobGroup())); + XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(info.getJobGroup()); String personal = I18nUtil.getString("admin_name_full"); String title = I18nUtil.getString("jobconf_monitor"); String content = MessageFormat.format(loadEmailJobAlarmTemplate(), diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java index 1b0405ac..ddf8eae4 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java @@ -1,6 +1,7 @@ package com.xxl.job.admin.core.conf; import com.xxl.job.admin.core.alarm.JobAlarmer; +import com.xxl.job.admin.core.id.GenerateId; import com.xxl.job.admin.core.scheduler.XxlJobScheduler; import com.xxl.job.admin.dao.*; import org.springframework.beans.factory.DisposableBean; @@ -85,6 +86,8 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean { private DataSource dataSource; @Resource private JobAlarmer jobAlarmer; + @Resource + private GenerateId generateId; public String getI18n() { @@ -155,4 +158,7 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean { return jobAlarmer; } + public GenerateId getGenerateId() { + return generateId; + } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java index f87a7a68..ed9fef48 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java @@ -9,7 +9,7 @@ import java.util.List; */ public class XxlJobGroup { - private int id; + private long id; private String appname; private String title; private int addressType; // 执行器地址类型:0=自动注册、1=手动录入 @@ -24,11 +24,11 @@ public class XxlJobGroup { return registryList; } - public int getId() { + public long getId() { return id; } - public void setId(int id) { + public void setId(long id) { this.id = id; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java index 1e4a74b1..05121384 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java @@ -9,9 +9,9 @@ import java.util.Date; */ public class XxlJobInfo { - private int id; // 主键ID + private long id; // 主键ID - private int jobGroup; // 执行器主键ID + private long jobGroup; // 执行器主键ID private String jobCron; // 任务执行CRON表达式 private String jobDesc; @@ -40,19 +40,19 @@ public class XxlJobInfo { private long triggerNextTime; // 下次调度时间 - public int getId() { + public long getId() { return id; } - public void setId(int id) { + public void setId(long id) { this.id = id; } - public int getJobGroup() { + public long getJobGroup() { return jobGroup; } - public void setJobGroup(int jobGroup) { + public void setJobGroup(long jobGroup) { this.jobGroup = jobGroup; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java index 7d3072aa..a035e5e5 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java @@ -11,8 +11,8 @@ public class XxlJobLog { private long id; // job info - private int jobGroup; - private int jobId; + private long jobGroup; + private long jobId; // execute info private String executorAddress; @@ -42,19 +42,19 @@ public class XxlJobLog { this.id = id; } - public int getJobGroup() { + public long getJobGroup() { return jobGroup; } - public void setJobGroup(int jobGroup) { + public void setJobGroup(long jobGroup) { this.jobGroup = jobGroup; } - public int getJobId() { + public long getJobId() { return jobId; } - public void setJobId(int jobId) { + public void setJobId(long jobId) { this.jobId = jobId; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java index 7b1ca461..5841b018 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java @@ -8,27 +8,27 @@ import java.util.Date; */ public class XxlJobLogGlue { - private int id; - private int jobId; // 任务主键ID + private long id; + private long jobId; // 任务主键ID private String glueType; // GLUE类型 #com.xxl.job.core.glue.GlueTypeEnum private String glueSource; private String glueRemark; private Date addTime; private Date updateTime; - public int getId() { + public long getId() { return id; } - public void setId(int id) { + public void setId(long id) { this.id = id; } - public int getJobId() { + public long getJobId() { return jobId; } - public void setJobId(int jobId) { + public void setJobId(long jobId) { this.jobId = jobId; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java index e58ff1a9..722b6582 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java @@ -4,7 +4,7 @@ import java.util.Date; public class XxlJobLogReport { - private int id; + private long id; private Date triggerDay; @@ -12,11 +12,11 @@ public class XxlJobLogReport { private int sucCount; private int failCount; - public int getId() { + public long getId() { return id; } - public void setId(int id) { + public void setId(long id) { this.id = id; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java index 924d6d33..67e74bb0 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java @@ -7,17 +7,17 @@ import java.util.Date; */ public class XxlJobRegistry { - private int id; + private long id; private String registryGroup; private String registryKey; private String registryValue; private Date updateTime; - public int getId() { + public long getId() { return id; } - public void setId(int id) { + public void setId(long id) { this.id = id; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java index db17327a..9773e0d1 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java @@ -7,17 +7,17 @@ import org.springframework.util.StringUtils; */ public class XxlJobUser { - private int id; + private long id; private String username; // 账号 private String password; // 密码 private int role; // 角色:0-普通用户、1-管理员 private String permission; // 权限:执行器ID列表,多个逗号分割 - public int getId() { + public long getId() { return id; } - public void setId(int id) { + public void setId(long id) { this.id = id; } @@ -54,7 +54,7 @@ public class XxlJobUser { } // plugin - public boolean validPermission(int jobGroup){ + public boolean validPermission(long jobGroup){ if (this.role == 1) { return true; } else { diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java index 41ac671c..64d8f83c 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java @@ -56,7 +56,7 @@ public class ExecutorRouteConsistentHash extends ExecutorRouter { return truncateHashCode; } - public String hashJob(int jobId, List addressList) { + public String hashJob(long jobId, List addressList) { // ------A1------A2-------A3------ // -----------J1------------------ diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java index 9df19726..6075ca58 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java @@ -17,10 +17,10 @@ import java.util.concurrent.ConcurrentMap; */ public class ExecutorRouteLFU extends ExecutorRouter { - private static ConcurrentMap> jobLfuMap = new ConcurrentHashMap>(); + private static ConcurrentMap> jobLfuMap = new ConcurrentHashMap<>(); private static long CACHE_VALID_TIME = 0; - public String route(int jobId, List addressList) { + public String route(long jobId, List addressList) { // cache clear if (System.currentTimeMillis() > CACHE_VALID_TIME) { diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java index 2d540067..b769a7b2 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java @@ -19,10 +19,10 @@ import java.util.concurrent.ConcurrentMap; */ public class ExecutorRouteLRU extends ExecutorRouter { - private static ConcurrentMap> jobLRUMap = new ConcurrentHashMap>(); + private static ConcurrentMap> jobLRUMap = new ConcurrentHashMap<>(); private static long CACHE_VALID_TIME = 0; - public String route(int jobId, List addressList) { + public String route(long jobId, List addressList) { // cache clear if (System.currentTimeMillis() > CACHE_VALID_TIME) { diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java index 936ef0ed..f64ae6d1 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java @@ -14,9 +14,9 @@ import java.util.concurrent.ConcurrentMap; */ public class ExecutorRouteRound extends ExecutorRouter { - private static ConcurrentMap routeCountEachJob = new ConcurrentHashMap(); + private static ConcurrentMap routeCountEachJob = new ConcurrentHashMap<>(); private static long CACHE_VALID_TIME = 0; - private static int count(int jobId) { + private static int count(long jobId) { // cache clear if (System.currentTimeMillis() > CACHE_VALID_TIME) { routeCountEachJob.clear(); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java index 33e4d250..b07b35ad 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java @@ -1,5 +1,6 @@ package com.xxl.job.admin.core.thread; +import com.github.pagehelper.PageHelper; import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.model.XxlJobLog; @@ -38,7 +39,8 @@ public class JobFailMonitorHelper { while (!toStop) { try { - List failLogIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findFailJobLogIds(1000); + PageHelper.startPage(1,1000); + List failLogIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findFailJobLogIds(); if (failLogIds!=null && !failLogIds.isEmpty()) { for (long failLogId: failLogIds) { diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java index 2387a0c4..130c5522 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java @@ -1,5 +1,6 @@ package com.xxl.job.admin.core.thread; +import com.github.pagehelper.PageHelper; import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.core.model.XxlJobLogReport; import org.slf4j.Logger; @@ -24,7 +25,6 @@ public class JobLogReportHelper { return instance; } - private Thread logrThread; private volatile boolean toStop = false; public void start(){ @@ -83,6 +83,7 @@ public class JobLogReportHelper { // do refresh int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().update(xxlJobLogReport); if (ret < 1) { + xxlJobLogReport.setId(XxlJobAdminConfig.getAdminConfig().getGenerateId().getId()); XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().save(xxlJobLogReport); } } @@ -109,7 +110,8 @@ public class JobLogReportHelper { // clean expired log List logIds = null; do { - logIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findClearLogIds(0, 0, clearBeforeTime, 0, 1000); + PageHelper.startPage(1,1000); + logIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findClearLogIds(0, 0, clearBeforeTime, null); if (logIds!=null && logIds.size()>0) { XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().clearLog(logIds); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java index 5c23237d..6ae3fed6 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java @@ -4,6 +4,7 @@ import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.core.model.XxlJobRegistry; import com.xxl.job.core.enums.RegistryConfig; +import com.xxl.job.core.util.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,14 +36,16 @@ public class JobRegistryMonitorHelper { if (groupList!=null && !groupList.isEmpty()) { // remove dead address (admin/executor) - List ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT, new Date()); + Date date = DateUtil.addSecond(new Date(), -RegistryConfig.DEAD_TIMEOUT); + List ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(date); if (ids!=null && ids.size()>0) { XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids); } // fresh online address (admin/executor) HashMap> appAddressMap = new HashMap>(); - List list = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findAll(RegistryConfig.DEAD_TIMEOUT, new Date()); + Date time = DateUtil.addSecond(new Date(), -RegistryConfig.DEAD_TIMEOUT); + List list = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findAll(time); if (list != null) { for (XxlJobRegistry item: list) { if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) { @@ -72,7 +75,7 @@ public class JobRegistryMonitorHelper { } addressListStr = addressListStr.substring(0, addressListStr.length()-1); } - group.setAddressList(addressListStr); + group.setAddressList(addressListStr == null ? "" : addressListStr); XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().update(group); } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java index e425b323..8b0ad589 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java @@ -1,5 +1,6 @@ package com.xxl.job.admin.core.thread; +import com.github.pagehelper.PageHelper; import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.core.cron.CronExpression; import com.xxl.job.admin.core.model.XxlJobInfo; @@ -32,7 +33,7 @@ public class JobScheduleHelper { private Thread ringThread; private volatile boolean scheduleThreadToStop = false; private volatile boolean ringThreadToStop = false; - private volatile static Map> ringData = new ConcurrentHashMap<>(); + private volatile static Map> ringData = new ConcurrentHashMap<>(); public void start(){ @@ -76,7 +77,8 @@ public class JobScheduleHelper { // 1、pre read long nowTime = System.currentTimeMillis(); - List scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount); + PageHelper.startPage(1,preReadCount); + List scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleJobQuery(nowTime + PRE_READ_MS); if (scheduleList!=null && scheduleList.size()>0) { // 2、push time-ring for (XxlJobInfo jobInfo: scheduleList) { @@ -226,10 +228,10 @@ public class JobScheduleHelper { try { // second data - List ringItemData = new ArrayList<>(); + List ringItemData = new ArrayList<>(); int nowSecond = Calendar.getInstance().get(Calendar.SECOND); // 避免处理耗时太长,跨过刻度,向前校验一个刻度; for (int i = 0; i < 2; i++) { - List tmpData = ringData.remove( (nowSecond+60-i)%60 ); + List tmpData = ringData.remove( (nowSecond+60-i)%60 ); if (tmpData != null) { ringItemData.addAll(tmpData); } @@ -239,7 +241,7 @@ public class JobScheduleHelper { logger.debug(">>>>>>>>>>> xxl-job, time-ring beat : " + nowSecond + " = " + Arrays.asList(ringItemData) ); if (ringItemData.size() > 0) { // do trigger - for (int jobId: ringItemData) { + for (long jobId: ringItemData) { // do trigger JobTriggerPoolHelper.trigger(jobId, TriggerTypeEnum.CRON, -1, null, null, null); } @@ -281,11 +283,11 @@ public class JobScheduleHelper { } } - private void pushTimeRing(int ringSecond, int jobId){ + private void pushTimeRing(int ringSecond, long jobId){ // push async ring - List ringItemData = ringData.get(ringSecond); + List ringItemData = ringData.get(ringSecond); if (ringItemData == null) { - ringItemData = new ArrayList(); + ringItemData = new ArrayList<>(); ringData.put(ringSecond, ringItemData); } ringItemData.add(jobId); @@ -316,7 +318,7 @@ public class JobScheduleHelper { boolean hasRingData = false; if (!ringData.isEmpty()) { for (int second : ringData.keySet()) { - List tmpData = ringData.get(second); + List tmpData = ringData.get(second); if (tmpData!=null && tmpData.size()>0) { hasRingData = true; break; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java index 398713dd..42a0cfa1 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java @@ -6,6 +6,7 @@ import com.xxl.job.admin.core.trigger.XxlJobTrigger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Resource; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; @@ -16,6 +17,8 @@ import java.util.concurrent.atomic.AtomicInteger; */ public class JobTriggerPoolHelper { private static Logger logger = LoggerFactory.getLogger(JobTriggerPoolHelper.class); + @Resource + private XxlJobTrigger xxlJobTrigger; // ---------------------- trigger pool ---------------------- @@ -63,13 +66,13 @@ public class JobTriggerPoolHelper { // job timeout count private volatile long minTim = System.currentTimeMillis()/60000; // ms > min - private volatile ConcurrentMap jobTimeoutCountMap = new ConcurrentHashMap<>(); + private volatile ConcurrentMap jobTimeoutCountMap = new ConcurrentHashMap<>(); /** * add trigger */ - public void addTrigger(final int jobId, + public void addTrigger(final long jobId, final TriggerTypeEnum triggerType, final int failRetryCount, final String executorShardingParam, @@ -143,7 +146,7 @@ public class JobTriggerPoolHelper { * null: use job param * not null: cover job param */ - public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam, String addressList) { + public static void trigger(long jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam, String addressList) { helper.addTrigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam, addressList); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java index 748befc6..23f01e13 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java @@ -15,6 +15,7 @@ import com.xxl.job.core.util.IpUtil; import com.xxl.job.core.util.ThrowableUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; import java.util.Date; @@ -22,9 +23,13 @@ import java.util.Date; * xxl-job trigger * Created by xuxueli on 17/7/13. */ +@Component public class XxlJobTrigger { private static Logger logger = LoggerFactory.getLogger(XxlJobTrigger.class); +// @Autowired +// private static GenerateId generateId; + /** * trigger job * @@ -41,7 +46,7 @@ public class XxlJobTrigger { * null: use executor addressList * not null: cover */ - public static void trigger(int jobId, + public static void trigger(long jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, @@ -120,6 +125,10 @@ public class XxlJobTrigger { jobLog.setJobGroup(jobInfo.getJobGroup()); jobLog.setJobId(jobInfo.getId()); jobLog.setTriggerTime(new Date()); + jobLog.setId(XxlJobAdminConfig.getAdminConfig().getGenerateId().getId()); + jobLog.setHandleTime(new Date()); + jobLog.setExecutorFailRetryCount(0); + jobLog.setAlarmStatus(0); XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().save(jobLog); logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId()); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java index b608d9fb..f3cef774 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java @@ -20,18 +20,14 @@ public interface XxlJobGroupDao { public int update(XxlJobGroup xxlJobGroup); - public int remove(@Param("id") int id); + public int remove(@Param("id") long Id); - public XxlJobGroup load(@Param("id") int id); + public XxlJobGroup load(@Param("id") long Id); - public List pageList(@Param("offset") int offset, - @Param("pagesize") int pagesize, - @Param("appname") String appname, + public List pageList(@Param("appname") String appname, @Param("title") String title); - public int pageListCount(@Param("offset") int offset, - @Param("pagesize") int pagesize, - @Param("appname") String appname, + public int pageListCount(@Param("appname") String appname, @Param("title") String title); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java index d640efff..beeade63 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java @@ -14,16 +14,12 @@ import java.util.List; @Mapper public interface XxlJobInfoDao { - public List pageList(@Param("offset") int offset, - @Param("pagesize") int pagesize, - @Param("jobGroup") int jobGroup, + public List pageList(@Param("jobGroup") long jobGroup, @Param("triggerStatus") int triggerStatus, @Param("jobDesc") String jobDesc, @Param("executorHandler") String executorHandler, @Param("author") String author); - public int pageListCount(@Param("offset") int offset, - @Param("pagesize") int pagesize, - @Param("jobGroup") int jobGroup, + public int pageListCount(@Param("jobGroup") long jobGroup, @Param("triggerStatus") int triggerStatus, @Param("jobDesc") String jobDesc, @Param("executorHandler") String executorHandler, @@ -31,17 +27,17 @@ public interface XxlJobInfoDao { public int save(XxlJobInfo info); - public XxlJobInfo loadById(@Param("id") int id); + public XxlJobInfo loadById(@Param("id") long id); public int update(XxlJobInfo xxlJobInfo); public int delete(@Param("id") long id); - public List getJobsByGroup(@Param("jobGroup") int jobGroup); + public List getJobsByGroup(@Param("jobGroup") long jobGroup); public int findAllCount(); - public List scheduleJobQuery(@Param("maxNextTime") long maxNextTime, @Param("pagesize") int pagesize ); + public List scheduleJobQuery(@Param("maxNextTime") long maxNextTime ); public int scheduleUpdate(XxlJobInfo xxlJobInfo); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java index 62fa3b4f..2c953039 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java @@ -16,17 +16,13 @@ import java.util.Map; public interface XxlJobLogDao { // exist jobId not use jobGroup, not exist use jobGroup - public List pageList(@Param("offset") int offset, - @Param("pagesize") int pagesize, - @Param("jobGroup") int jobGroup, - @Param("jobId") int jobId, + public List pageList(@Param("jobGroup") long jobGroup, + @Param("jobId") long jobId, @Param("triggerTimeStart") Date triggerTimeStart, @Param("triggerTimeEnd") Date triggerTimeEnd, @Param("logStatus") int logStatus); - public int pageListCount(@Param("offset") int offset, - @Param("pagesize") int pagesize, - @Param("jobGroup") int jobGroup, - @Param("jobId") int jobId, + public int pageListCount(@Param("jobGroup") long jobGroup, + @Param("jobId") long jobId, @Param("triggerTimeStart") Date triggerTimeStart, @Param("triggerTimeEnd") Date triggerTimeEnd, @Param("logStatus") int logStatus); @@ -39,19 +35,19 @@ public interface XxlJobLogDao { public int updateHandleInfo(XxlJobLog xxlJobLog); - public int delete(@Param("jobId") int jobId); + public int delete(@Param("jobId") long jobId); public Map findLogReport(@Param("from") Date from, @Param("to") Date to); - public List findClearLogIds(@Param("jobGroup") int jobGroup, - @Param("jobId") int jobId, + public List findClearLogIds(@Param("jobGroup") long jobGroup, + @Param("jobId") long jobId, @Param("clearBeforeTime") Date clearBeforeTime, - @Param("clearBeforeNum") int clearBeforeNum, - @Param("pagesize") int pagesize); + @Param("recentLogIds") List recentLogIds + ); public int clearLog(@Param("logIds") List logIds); - public List findFailJobLogIds(@Param("pagesize") int pagesize); + public List findFailJobLogIds(); public int updateAlarmStatus(@Param("logId") long logId, @Param("oldAlarmStatus") int oldAlarmStatus, @@ -59,4 +55,6 @@ public interface XxlJobLogDao { public List findLostJobIds(@Param("losedTime") Date losedTime); + public List findRecentLogs(@Param("jobGroup") long jobGroup, @Param("jobId") long jobId); + } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java index 3028aed2..1fd37d59 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java @@ -15,10 +15,12 @@ public interface XxlJobLogGlueDao { public int save(XxlJobLogGlue xxlJobLogGlue); - public List findByJobId(@Param("jobId") int jobId); + public List findByJobId(@Param("jobId") long jobId); - public int removeOld(@Param("jobId") int jobId, @Param("limit") int limit); + public int removeOld(@Param("jobId") long jobId,@Param("recentLogIds") List recentLogIds); - public int deleteByJobId(@Param("jobId") int jobId); + public int deleteByJobId(@Param("jobId") long jobId); + + public List findIds(@Param("jobId") long jobId); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java index f4b3dc81..7c60e27b 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java @@ -14,7 +14,7 @@ import java.util.List; @Mapper public interface XxlJobLogReportDao { - public int save(XxlJobLogReport xxlJobLogReport); + void save(XxlJobLogReport xxlJobLogReport); public int update(XxlJobLogReport xxlJobLogReport); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java index 1005c46c..03dc73cb 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java @@ -13,13 +13,11 @@ import java.util.List; @Mapper public interface XxlJobRegistryDao { - public List findDead(@Param("timeout") int timeout, - @Param("nowTime") Date nowTime); + public List findDead(@Param("date") Date date); - public int removeDead(@Param("ids") List ids); + public int removeDead(@Param("ids") List ids); - public List findAll(@Param("timeout") int timeout, - @Param("nowTime") Date nowTime); + public List findAll(@Param("date") Date date); public int registryUpdate(@Param("registryGroup") String registryGroup, @Param("registryKey") String registryKey, @@ -29,7 +27,8 @@ public interface XxlJobRegistryDao { public int registrySave(@Param("registryGroup") String registryGroup, @Param("registryKey") String registryKey, @Param("registryValue") String registryValue, - @Param("updateTime") Date updateTime); + @Param("updateTime") Date updateTime, + @Param("id") long id); public int registryDelete(@Param("registryGroup") String registryGroup, @Param("registryKey") String registryKey, diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java index e8404947..979cab32 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java @@ -11,21 +11,16 @@ import java.util.List; @Mapper public interface XxlJobUserDao { - public List pageList(@Param("offset") int offset, - @Param("pagesize") int pagesize, - @Param("username") String username, - @Param("role") int role); - public int pageListCount(@Param("offset") int offset, - @Param("pagesize") int pagesize, - @Param("username") String username, - @Param("role") int role); + public List pageList(@Param("username") String username, @Param("role") int role); + + public int pageListCount(@Param("username") String username, @Param("role") int role); public XxlJobUser loadByUserName(@Param("username") String username); - public int save(XxlJobUser xxlJobUser); + public void save(XxlJobUser xxlJobUser); public int update(XxlJobUser xxlJobUser); - public int delete(@Param("id") int id); + public int delete(@Param("id") long id); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java index 61da3a27..03129d4e 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java @@ -25,7 +25,7 @@ public interface XxlJobService { * @param author * @return */ - public Map pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author); + public Map pageList(int start, int length, long jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author); /** * add job @@ -49,7 +49,7 @@ public interface XxlJobService { * @param id * @return */ - public ReturnT remove(int id); + public ReturnT remove(long id); /** * start job @@ -57,7 +57,7 @@ public interface XxlJobService { * @param id * @return */ - public ReturnT start(int id); + public ReturnT start(long id); /** * stop job @@ -65,7 +65,7 @@ public interface XxlJobService { * @param id * @return */ - public ReturnT stop(int id); + public ReturnT stop(long id); /** * dashboard info diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java index 51fbff92..f792dd12 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java @@ -1,5 +1,6 @@ package com.xxl.job.admin.service.impl; +import com.xxl.job.admin.core.id.GenerateId; import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.core.thread.JobTriggerPoolHelper; @@ -39,6 +40,8 @@ public class AdminBizImpl implements AdminBiz { private XxlJobRegistryDao xxlJobRegistryDao; @Resource private XxlJobGroupDao xxlJobGroupDao; + @Resource + private GenerateId generateId; @Override @@ -141,7 +144,7 @@ public class AdminBizImpl implements AdminBiz { int ret = xxlJobRegistryDao.registryUpdate(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue(), new Date()); if (ret < 1) { - xxlJobRegistryDao.registrySave(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue(), new Date()); + xxlJobRegistryDao.registrySave(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue(), new Date(), generateId.getId()); // fresh freshGroupRegistryInfo(registryParam); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java index 526c43b3..a723150d 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java @@ -1,5 +1,7 @@ package com.xxl.job.admin.service.impl; +import com.github.pagehelper.PageHelper; +import com.xxl.job.admin.core.id.GenerateId; import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.cron.CronExpression; @@ -16,7 +18,6 @@ import com.xxl.job.core.util.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; - import javax.annotation.Resource; import java.text.MessageFormat; import java.text.ParseException; @@ -40,13 +41,16 @@ public class XxlJobServiceImpl implements XxlJobService { private XxlJobLogGlueDao xxlJobLogGlueDao; @Resource private XxlJobLogReportDao xxlJobLogReportDao; + @Resource + private GenerateId generateId; @Override - public Map pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) { + public Map pageList(int start, int length, long jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) { // page list - List list = xxlJobInfoDao.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author); - int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author); + PageHelper.startPage(start/length+1,length); + List list = xxlJobInfoDao.pageList(jobGroup, triggerStatus, jobDesc, executorHandler, author); + int list_count = xxlJobInfoDao.pageListCount(jobGroup, triggerStatus, jobDesc, executorHandler, author); // package result Map maps = new HashMap(); @@ -120,6 +124,7 @@ public class XxlJobServiceImpl implements XxlJobService { jobInfo.setAddTime(new Date()); jobInfo.setUpdateTime(new Date()); jobInfo.setGlueUpdatetime(new Date()); + jobInfo.setId(generateId.getId()); xxlJobInfoDao.save(jobInfo); if (jobInfo.getId() < 1) { return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_add")+I18nUtil.getString("system_fail")) ); @@ -128,6 +133,10 @@ public class XxlJobServiceImpl implements XxlJobService { return new ReturnT(String.valueOf(jobInfo.getId())); } + public static void main(String[] args) { +// Integer a = 185337369535193088; + } + private boolean isNumeric(String str){ try { int result = Integer.valueOf(str); @@ -232,7 +241,7 @@ public class XxlJobServiceImpl implements XxlJobService { } @Override - public ReturnT remove(int id) { + public ReturnT remove(long id) { XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id); if (xxlJobInfo == null) { return ReturnT.SUCCESS; @@ -245,7 +254,7 @@ public class XxlJobServiceImpl implements XxlJobService { } @Override - public ReturnT start(int id) { + public ReturnT start(long id) { XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id); // next trigger time (5s后生效,避开预读周期) @@ -271,7 +280,7 @@ public class XxlJobServiceImpl implements XxlJobService { } @Override - public ReturnT stop(int id) { + public ReturnT stop(long id) { XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id); xxlJobInfo.setTriggerStatus(0); diff --git a/xxl-job-admin/src/main/resources/application.properties b/xxl-job-admin/src/main/resources/application.properties index eea8afe7..80dffb4a 100644 --- a/xxl-job-admin/src/main/resources/application.properties +++ b/xxl-job-admin/src/main/resources/application.properties @@ -21,12 +21,25 @@ spring.freemarker.settings.number_format=0.########## ### mybatis mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml #mybatis.type-aliases-package=com.xxl.job.admin.core.model +logging.level.com.xxl.job.admin.dao.XxlJobLogDao=debug +logging.level.com.xxl.job.admin.dao.XxlJobRegistryDao=debug +logging.level.com.xxl.job.admin.dao.XxlJobLogReportDao=debug ### xxl-job, datasource -spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai -spring.datasource.username=root -spring.datasource.password=root_pwd -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +#spring.datasource.url=jdbc:mysql://192.168.1.116:3306/xxl_job_220?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai +#spring.datasource.username=root +#spring.datasource.password=root@123 +#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +#spring.datasource.hikari.connection-test-query=SELECT 1 +#pagehelper.helper-dialect=mysql + +spring.datasource.url = jdbc:oracle:thin:@192.168.1.99:1521/orcl +spring.datasource.username=upms +spring.datasource.password=upms123456 +spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver +#spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL +pagehelper.helper-dialect=oracle +mybatis.configuration.jdbc-type-for-null=NULL ### datasource-pool spring.datasource.type=com.zaxxer.hikari.HikariDataSource @@ -37,7 +50,7 @@ spring.datasource.hikari.idle-timeout=30000 spring.datasource.hikari.pool-name=HikariCP spring.datasource.hikari.max-lifetime=900000 spring.datasource.hikari.connection-timeout=10000 -spring.datasource.hikari.connection-test-query=SELECT 1 +#spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL ### xxl-job, email spring.mail.host=smtp.qq.com @@ -61,3 +74,5 @@ xxl.job.triggerpool.slow.max=100 ### xxl-job, log retention days xxl.job.logretentiondays=30 + + diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml index 7635214a..18cf7d43 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml @@ -12,75 +12,74 @@ - t.id, - t.app_name, - t.title, - t.address_type, - t.address_list + id, + app_name, + title, + address_type, + address_list - - INSERT INTO xxl_job_group ( `app_name`, `title`, `address_type`, `address_list`) - values ( #{appname}, #{title}, #{addressType}, #{addressList}); + + INSERT INTO xxl_job_group (id, app_name, title, address_type, address_list) + values (#{id}, #{appname}, #{title}, #{addressType}, #{addressList}) UPDATE xxl_job_group - SET `app_name` = #{appname}, - `title` = #{title}, - `address_type` = #{addressType}, - `address_list` = #{addressList} + SET app_name = #{appname}, + title = #{title}, + address_type = #{addressType}, + address_list = #{addressList} WHERE id = #{id} - + DELETE FROM xxl_job_group WHERE id = #{id} - SELECT - FROM xxl_job_group AS t - WHERE t.id = #{id} + FROM xxl_job_group + WHERE id = #{id} diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml index cb9048d2..67acb8e4 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml @@ -36,78 +36,78 @@ - t.id, - t.job_group, - t.job_cron, - t.job_desc, - t.add_time, - t.update_time, - t.author, - t.alarm_email, - t.executor_route_strategy, - t.executor_handler, - t.executor_param, - t.executor_block_strategy, - t.executor_timeout, - t.executor_fail_retry_count, - t.glue_type, - t.glue_source, - t.glue_remark, - t.glue_updatetime, - t.child_jobid, - t.trigger_status, - t.trigger_last_time, - t.trigger_next_time + id, + job_group, + job_cron, + job_desc, + add_time, + update_time, + author, + alarm_email, + 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 - + INSERT INTO xxl_job_info ( + id, job_group, job_cron, job_desc, @@ -130,11 +130,12 @@ trigger_last_time, trigger_next_time ) VALUES ( + #{id}, #{jobGroup}, #{jobCron}, #{jobDesc}, - #{addTime}, - #{updateTime}, + #{addTime,jdbcType=TIMESTAMP}, + #{updateTime,jdbcType=TIMESTAMP}, #{author}, #{alarmEmail}, #{executorRouteStrategy}, @@ -146,12 +147,12 @@ #{glueType}, #{glueSource}, #{glueRemark}, - #{glueUpdatetime}, + #{glueUpdatetime,jdbcType=TIMESTAMP}, #{childJobId}, #{triggerStatus}, #{triggerLastTime}, #{triggerNextTime} - ); + ) - SELECT - FROM xxl_job_logglue AS t - WHERE t.job_id = #{jobId} + FROM xxl_job_logglue + WHERE job_id = #{jobId} ORDER BY id DESC DELETE FROM xxl_job_logglue - WHERE id NOT in( - SELECT id FROM( - SELECT id FROM xxl_job_logglue - WHERE `job_id` = #{jobId} - ORDER BY update_time desc - LIMIT 0, #{limit} - ) t1 - ) AND `job_id` = #{jobId} + WHERE job_id = #{jobId} + + AND id NOT in + + #{item} + + + ) - + DELETE FROM xxl_job_logglue - WHERE `job_id` = #{jobId} + WHERE job_id = #{jobId} + + \ No newline at end of file diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml index 7944f50e..7545ca24 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml @@ -27,110 +27,115 @@ - t.id, - t.job_group, - t.job_id, - t.executor_address, - t.executor_handler, - t.executor_param, - t.executor_sharding_param, - t.executor_fail_retry_count, - t.trigger_time, - t.trigger_code, - t.trigger_msg, - t.handle_time, - t.handle_code, - t.handle_msg, - t.alarm_status + 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 - + INSERT INTO xxl_job_log ( - `job_group`, - `job_id`, - `trigger_time`, - `trigger_code`, - `handle_code` + id, + job_group, + job_id, + trigger_time, + trigger_code, + handle_code, + executor_fail_retry_count, + alarm_status ) VALUES ( + #{id}, #{jobGroup}, #{jobId}, - #{triggerTime}, + #{triggerTime,jdbcType=TIMESTAMP}, #{triggerCode}, - #{handleCode} - ); + #{handleCode}, + #{executorFailRetryCount}, + #{alarmStatus} + ) @@ -139,24 +144,24 @@ UPDATE xxl_job_log SET - `trigger_time`= #{triggerTime}, - `trigger_code`= #{triggerCode}, - `trigger_msg`= #{triggerMsg}, - `executor_address`= #{executorAddress}, - `executor_handler`=#{executorHandler}, - `executor_param`= #{executorParam}, - `executor_sharding_param`= #{executorShardingParam}, - `executor_fail_retry_count`= #{executorFailRetryCount} - WHERE `id`= #{id} + trigger_time= #{triggerTime,jdbcType=TIMESTAMP}, + trigger_code= #{triggerCode}, + trigger_msg= #{triggerMsg}, + executor_address= #{executorAddress}, + executor_handler=#{executorHandler}, + executor_param= #{executorParam}, + executor_sharding_param= #{executorShardingParam}, + executor_fail_retry_count= #{executorFailRetryCount} + WHERE id= #{id} UPDATE xxl_job_log SET - `handle_time`= #{handleTime}, - `handle_code`= #{handleCode}, - `handle_msg`= #{handleMsg} - WHERE `id`= #{id} + handle_time= #{handleTime,jdbcType=TIMESTAMP}, + handle_code= #{handleCode}, + handle_msg= #{handleMsg} + WHERE id= #{id} @@ -197,26 +202,14 @@ AND trigger_time #{clearBeforeTime} - - AND id NOT in( - SELECT id FROM( - SELECT id FROM xxl_job_log AS t - - - AND t.job_group = #{jobGroup} - - - AND t.job_id = #{jobId} - - - ORDER BY t.trigger_time desc - LIMIT 0, #{clearBeforeNum} - ) t1 - ) + + AND id NOT in + + #{item} + order by id asc - LIMIT #{pagesize} @@ -228,34 +221,46 @@ UPDATE xxl_job_log SET - `alarm_status` = #{newAlarmStatus} - WHERE `id`= #{logId} AND `alarm_status` = #{oldAlarmStatus} + alarm_status = #{newAlarmStatus} + WHERE id= #{logId} AND alarm_status = #{oldAlarmStatus} + + \ No newline at end of file diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml index 579d5f39..b45d0e8b 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml @@ -12,25 +12,27 @@ - t.id, - t.trigger_day, - t.running_count, - t.suc_count, - t.fail_count + id, + trigger_day, + running_count, + suc_count, + fail_count - + INSERT INTO xxl_job_log_report ( - `trigger_day`, - `running_count`, - `suc_count`, - `fail_count` + id, + trigger_day, + running_count, + suc_count, + fail_count ) VALUES ( - #{triggerDay}, + #{id}, + #{triggerDay,jdbcType=TIMESTAMP}, #{runningCount}, #{sucCount}, #{failCount} - ); + ) @@ -38,17 +40,17 @@ UPDATE xxl_job_log_report - SET `running_count` = #{runningCount}, - `suc_count` = #{sucCount}, - `fail_count` = #{failCount} - WHERE `trigger_day` = #{triggerDay} + SET running_count = #{runningCount}, + suc_count = #{sucCount}, + fail_count = #{failCount} + WHERE trigger_day = #{triggerDay,jdbcType=TIMESTAMP} \ No newline at end of file diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml index 4cae667a..17349d2d 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml @@ -12,20 +12,20 @@ - t.id, - t.registry_group, - t.registry_key, - t.registry_value, - t.update_time + id, + registry_group, + registry_key, + registry_value, + update_time - + SELECT id + FROM xxl_job_registry + WHERE update_time #{date,jdbcType=TIMESTAMP} - - + + DELETE FROM xxl_job_registry WHERE id in @@ -35,21 +35,21 @@ UPDATE xxl_job_registry - SET `update_time` = #{updateTime} - WHERE `registry_group` = #{registryGroup} - AND `registry_key` = #{registryKey} - AND `registry_value` = #{registryValue} + SET update_time = #{updateTime,jdbcType=TIMESTAMP} + WHERE registry_group = #{registryGroup} + AND registry_key = #{registryKey} + AND registry_value = #{registryValue} - INSERT INTO xxl_job_registry( `registry_group` , `registry_key` , `registry_value`, `update_time`) - VALUES( #{registryGroup} , #{registryKey} , #{registryValue}, #{updateTime}) + INSERT INTO xxl_job_registry( registry_group , registry_key , registry_value, update_time,id) + VALUES( #{registryGroup} , #{registryKey} , #{registryValue}, #{updateTime,jdbcType=TIMESTAMP},#{id}) diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml index 9e09b4aa..f588cf8c 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml @@ -12,59 +12,60 @@ - t.id, - t.username, - t.password, - t.role, - t.permission + id, + username, + password, + role, + permission - + INSERT INTO xxl_job_user ( + id, username, password, role, permission ) VALUES ( + #{id}, #{username}, #{password}, #{role}, #{permission} - ); + ) diff --git a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java index 1a27ab47..78b63dda 100644 --- a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java +++ b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java @@ -19,8 +19,8 @@ public class XxlJobInfoDaoTest { @Test public void pageList(){ - List list = xxlJobInfoDao.pageList(0, 20, 0, -1, null, null, null); - int list_count = xxlJobInfoDao.pageListCount(0, 20, 0, -1, null, null, null); + List list = xxlJobInfoDao.pageList(0, -1, null, null, null); + int list_count = xxlJobInfoDao.pageListCount(0, -1, null, null, null); System.out.println(list); System.out.println(list_count); diff --git a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobLogDaoTest.java b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobLogDaoTest.java index 94fe9c90..8e81d730 100644 --- a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobLogDaoTest.java +++ b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobLogDaoTest.java @@ -1,5 +1,6 @@ package com.xxl.job.admin.dao; +import com.github.pagehelper.PageHelper; import com.xxl.job.admin.core.model.XxlJobLog; import org.junit.Test; import org.junit.runner.RunWith; @@ -19,8 +20,9 @@ public class XxlJobLogDaoTest { @Test public void test(){ - List list = xxlJobLogDao.pageList(0, 10, 1, 1, null, null, 1); - int list_count = xxlJobLogDao.pageListCount(0, 10, 1, 1, null, null, 1); + PageHelper.startPage(1,10); + List list = xxlJobLogDao.pageList(1, 1, null, null, 1); + int list_count = xxlJobLogDao.pageListCount(1, 1, null, null, 1); XxlJobLog log = new XxlJobLog(); log.setJobGroup(1); @@ -46,7 +48,7 @@ public class XxlJobLogDaoTest { dto = xxlJobLogDao.load(log.getId()); - List ret4 = xxlJobLogDao.findClearLogIds(1, 1, new Date(), 100, 100); + List ret4 = xxlJobLogDao.findClearLogIds(1, 1, new Date(), null); int ret2 = xxlJobLogDao.delete(log.getJobId()); diff --git a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobLogGlueDaoTest.java b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobLogGlueDaoTest.java index 5fa71eec..41afa2ba 100644 --- a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobLogGlueDaoTest.java +++ b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobLogGlueDaoTest.java @@ -1,5 +1,6 @@ package com.xxl.job.admin.dao; +import com.github.pagehelper.PageHelper; import com.xxl.job.admin.core.model.XxlJobLogGlue; import org.junit.Test; import org.junit.runner.RunWith; @@ -31,7 +32,9 @@ public class XxlJobLogGlueDaoTest { List list = xxlJobLogGlueDao.findByJobId(1); - int ret2 = xxlJobLogGlueDao.removeOld(1, 1); + PageHelper.startPage(1,30); + List ids = xxlJobLogGlueDao.findIds(1); + int ret2 = xxlJobLogGlueDao.removeOld(1, ids); int ret3 =xxlJobLogGlueDao.deleteByJobId(1); } diff --git a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobRegistryDaoTest.java b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobRegistryDaoTest.java index 8a514a20..825f781b 100644 --- a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobRegistryDaoTest.java +++ b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobRegistryDaoTest.java @@ -1,6 +1,8 @@ package com.xxl.job.admin.dao; +import com.xxl.job.admin.core.id.GenerateId; import com.xxl.job.admin.core.model.XxlJobRegistry; +import com.xxl.job.core.util.DateUtil; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; @@ -17,17 +19,20 @@ public class XxlJobRegistryDaoTest { @Resource private XxlJobRegistryDao xxlJobRegistryDao; + @Resource + private GenerateId generateId; @Test public void test(){ int ret = xxlJobRegistryDao.registryUpdate("g1", "k1", "v1", new Date()); if (ret < 1) { - ret = xxlJobRegistryDao.registrySave("g1", "k1", "v1", new Date()); + ret = xxlJobRegistryDao.registrySave("g1", "k1", "v1", new Date(), generateId.getId()); } - List list = xxlJobRegistryDao.findAll(1, new Date()); + Date time = DateUtil.addSecond(new Date(),1); + List list = xxlJobRegistryDao.findAll(time); - int ret2 = xxlJobRegistryDao.removeDead(Arrays.asList(1)); + int ret2 = xxlJobRegistryDao.removeDead(Arrays.asList(1L)); } } diff --git a/xxl-job-admin/src/test/java/com/xxl/job/executorbiz/ExecutorBizTest.java b/xxl-job-admin/src/test/java/com/xxl/job/executorbiz/ExecutorBizTest.java index 746a7080..fceb3d23 100644 --- a/xxl-job-admin/src/test/java/com/xxl/job/executorbiz/ExecutorBizTest.java +++ b/xxl-job-admin/src/test/java/com/xxl/job/executorbiz/ExecutorBizTest.java @@ -36,7 +36,7 @@ public class ExecutorBizTest { public void idleBeat(){ ExecutorBiz executorBiz = new ExecutorBizClient(addressUrl, accessToken); - final int jobId = 0; + final long jobId = 0; // Act final ReturnT retval = executorBiz.idleBeat(new IdleBeatParam(jobId)); @@ -75,7 +75,7 @@ public class ExecutorBizTest { public void kill(){ ExecutorBiz executorBiz = new ExecutorBizClient(addressUrl, accessToken); - final int jobId = 0; + final long jobId = 0; // Act final ReturnT retval = executorBiz.kill(new KillParam(jobId)); diff --git a/xxl-job-core/pom.xml b/xxl-job-core/pom.xml index 79e8944b..da09a391 100644 --- a/xxl-job-core/pom.xml +++ b/xxl-job-core/pom.xml @@ -72,6 +72,13 @@ provided + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${mybatis.pagehelper.version} + + \ No newline at end of file diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/IdleBeatParam.java b/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/IdleBeatParam.java index 80cd288d..8c540ff5 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/IdleBeatParam.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/IdleBeatParam.java @@ -10,18 +10,18 @@ public class IdleBeatParam implements Serializable { public IdleBeatParam() { } - public IdleBeatParam(int jobId) { + public IdleBeatParam(long jobId) { this.jobId = jobId; } - private int jobId; + private long jobId; - public int getJobId() { + public long getJobId() { return jobId; } - public void setJobId(int jobId) { + public void setJobId(long jobId) { this.jobId = jobId; } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/KillParam.java b/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/KillParam.java index b0d96e36..c85abd4d 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/KillParam.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/KillParam.java @@ -10,18 +10,18 @@ public class KillParam implements Serializable { public KillParam() { } - public KillParam(int jobId) { + public KillParam(long jobId) { this.jobId = jobId; } - private int jobId; + private long jobId; - public int getJobId() { + public long getJobId() { return jobId; } - public void setJobId(int jobId) { + public void setJobId(long jobId) { this.jobId = jobId; } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java b/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java index 4f56368a..d69c0cc6 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java @@ -8,7 +8,7 @@ import java.io.Serializable; public class TriggerParam implements Serializable{ private static final long serialVersionUID = 42L; - private int jobId; + private long jobId; private String executorHandler; private String executorParams; @@ -26,11 +26,11 @@ public class TriggerParam implements Serializable{ private int broadcastTotal; - public int getJobId() { + public long getJobId() { return jobId; } - public void setJobId(int jobId) { + public void setJobId(long jobId) { this.jobId = jobId; } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java index 86936365..3500cf99 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java @@ -86,7 +86,7 @@ public class XxlJobExecutor { // destory jobThreadRepository if (jobThreadRepository.size() > 0) { - for (Map.Entry item: jobThreadRepository.entrySet()) { + for (Map.Entry item: jobThreadRepository.entrySet()) { JobThread oldJobThread = removeJobThread(item.getKey(), "web container destroy and kill the job."); // wait for job thread push result to callback queue if (oldJobThread != null) { @@ -174,8 +174,8 @@ public class XxlJobExecutor { // ---------------------- job thread repository ---------------------- - private static ConcurrentMap jobThreadRepository = new ConcurrentHashMap(); - public static JobThread registJobThread(int jobId, IJobHandler handler, String removeOldReason){ + private static ConcurrentMap jobThreadRepository = new ConcurrentHashMap(); + public static JobThread registJobThread(long jobId, IJobHandler handler, String removeOldReason){ JobThread newJobThread = new JobThread(jobId, handler); newJobThread.start(); logger.info(">>>>>>>>>>> xxl-job regist JobThread success, jobId:{}, handler:{}", new Object[]{jobId, handler}); @@ -188,7 +188,7 @@ public class XxlJobExecutor { return newJobThread; } - public static JobThread removeJobThread(int jobId, String removeOldReason){ + public static JobThread removeJobThread(long jobId, String removeOldReason){ JobThread oldJobThread = jobThreadRepository.remove(jobId); if (oldJobThread != null) { oldJobThread.toStop(removeOldReason); @@ -198,7 +198,7 @@ public class XxlJobExecutor { } return null; } - public static JobThread loadJobThread(int jobId){ + public static JobThread loadJobThread(long jobId){ JobThread jobThread = jobThreadRepository.get(jobId); return jobThread; } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java index 452c3877..8b4c72c0 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java @@ -15,12 +15,12 @@ import java.io.File; */ public class ScriptJobHandler extends IJobHandler { - private int jobId; + private long jobId; private long glueUpdatetime; private String gluesource; private GlueTypeEnum glueType; - public ScriptJobHandler(int jobId, long glueUpdatetime, String gluesource, GlueTypeEnum glueType){ + public ScriptJobHandler(long jobId, long glueUpdatetime, String gluesource, GlueTypeEnum glueType){ this.jobId = jobId; this.glueUpdatetime = glueUpdatetime; this.gluesource = gluesource; diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java b/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java index 126fd143..2e53d9c2 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java @@ -27,7 +27,7 @@ import java.util.concurrent.*; public class JobThread extends Thread{ private static Logger logger = LoggerFactory.getLogger(JobThread.class); - private int jobId; + private long jobId; private IJobHandler handler; private LinkedBlockingQueue triggerQueue; private Set triggerLogIdSet; // avoid repeat trigger for the same TRIGGER_LOG_ID @@ -39,7 +39,7 @@ public class JobThread extends Thread{ private int idleTimes = 0; // idel times - public JobThread(int jobId, IJobHandler handler) { + public JobThread(long jobId, IJobHandler handler) { this.jobId = jobId; this.handler = handler; this.triggerQueue = new LinkedBlockingQueue(); diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/util/DateUtil.java b/xxl-job-core/src/main/java/com/xxl/job/core/util/DateUtil.java index 71afe0a6..b8c4fc57 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/util/DateUtil.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/util/DateUtil.java @@ -143,6 +143,10 @@ public class DateUtil { return add(date, Calendar.MINUTE, amount); } + public static Date addSecond(final Date date, final int amount) { + return add(date, Calendar.SECOND, amount); + } + private static Date add(final Date date, final int calendarField, final int amount) { if (date == null) { return null; From 8501e3f8e7b18d4740889c846f322e4e050911be Mon Sep 17 00:00:00 2001 From: zhangjf <1204698504@qq.com> Date: Fri, 3 Jul 2020 13:26:54 +0800 Subject: [PATCH 06/16] =?UTF-8?q?=E9=80=82=E9=85=8DOracle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xxl/job/admin/core/id/GenerateId.java | 45 +++++++++ .../com/xxl/job/admin/core/id/HeartBeat.java | 28 ++++++ .../job/admin/core/id/SnowflakeIdWorker.java | 95 +++++++++++++++++++ .../core/id/impl/MachineServiceImpl.java | 80 ++++++++++++++++ .../admin/core/id/service/MachineService.java | 18 ++++ .../job/admin/core/model/XxlJobMachine.java | 58 +++++++++++ .../xxl/job/admin/core/util/MachineUtils.java | 27 ++++++ .../xxl/job/admin/dao/XxlJobMachineDao.java | 20 ++++ .../mybatis-mapper/XxlJobMachineMapper.xml | 38 ++++++++ 9 files changed, 409 insertions(+) create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/GenerateId.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/SnowflakeIdWorker.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/service/MachineService.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobMachine.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobMachineDao.java create mode 100644 xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobMachineMapper.xml diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/GenerateId.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/GenerateId.java new file mode 100644 index 00000000..f32ebb8a --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/GenerateId.java @@ -0,0 +1,45 @@ +package com.xxl.job.admin.core.id; + +import com.xxl.job.admin.core.id.service.MachineService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +public class GenerateId { + + private final Logger logger = LoggerFactory.getLogger(GenerateId.class); + + private SnowflakeIdWorker idWorker = null; + + @Autowired + private MachineService machineService; + + private Integer machineId = -1; + + public Long getId() { + return idWorker.nextId(); + } + + @PostConstruct + private void getIdBefore() { + //只需要第一次调用 对idworker进行初始化 + machineId = machineService.getInitMachineId(); + idWorker = new SnowflakeIdWorker(machineId); + } + + public Integer getMachineId(){ + return this.machineId; + } + + public void setMachineId(Integer machineId){ + this.machineId = machineId; + } + + public void setIdWorker(SnowflakeIdWorker snowflakeIdWorker){ + this.idWorker = snowflakeIdWorker; + } +} \ No newline at end of file diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java new file mode 100644 index 00000000..5c6d9741 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java @@ -0,0 +1,28 @@ +package com.xxl.job.admin.core.id; + +import com.xxl.job.admin.core.id.service.MachineService; +import com.xxl.job.admin.core.model.XxlJobMachine; +import com.xxl.job.admin.core.util.MachineUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component +@EnableScheduling +public class HeartBeat { + + @Autowired + private MachineService machineService; + + @Scheduled(fixedDelay = 10000) + public void checkMachineSurvive(){ + String machineIp = MachineUtils.get(); + XxlJobMachine xxlJobMachine = machineService.selectByMachineIp(machineIp); + if(xxlJobMachine != null){ + machineService.update(machineIp,new Date()); + } + } +} \ No newline at end of file diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/SnowflakeIdWorker.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/SnowflakeIdWorker.java new file mode 100644 index 00000000..3a660515 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/SnowflakeIdWorker.java @@ -0,0 +1,95 @@ +package com.xxl.job.admin.core.id; + +public class SnowflakeIdWorker { + + // ==============================Fields=========================================== + /** 开始时间截 (2019-01-01) */ + private final long twepoch = 1546272000000L; + + /** 机器id所占的位数 */ + private final long workerIdBits = 5L; + + /** 数据标识id所占的位数 */ + private final long datacenterIdBits = 5L; + + private final long maxMachineId = 1023; + + /** 序列在id中占的位数 */ + private final long sequenceBits = 12L; + + /** 机器ID向左移12位 */ + private final long getMachineIdShift = sequenceBits; + + /** 时间截向左移22位(5+5+12) */ + private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; + + /** 生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095) */ + private final long sequenceMask = -1L ^ (-1L << sequenceBits); + + /** 机器Id */ + private long machineId; + + /** 毫秒内序列(0~4095) */ + private long sequence = 0L; + + /** 上次生成ID的时间截 */ + private long lastTimestamp = -1L; + + // ==============================Constructors===================================== + /** + * 构造函数 + * + * @param machineId 工作ID (0~31) + */ + public SnowflakeIdWorker(long machineId) { + if (machineId > maxMachineId || machineId < 0) { + throw new IllegalArgumentException( + String.format("worker machineId can't be greater than %d or less than 0", maxMachineId)); + } + this.machineId = machineId; + } + + // ==============================Methods========================================== + /** + * 获得下一个ID (该方法是线程安全的) + * + * @return SnowflakeId + */ + public synchronized long nextId() { + long timestamp = timeGen(); + + // 如果是同一时间生成的,则进行毫秒内序列 + if (timestamp <= lastTimestamp) { + + timestamp = lastTimestamp; + sequence = (sequence + 1) & sequenceMask; + // 毫秒内序列溢出 + if (sequence == 0) { + // 阻塞到下一个毫秒,获得新的时间戳 + timestamp++; + } + } + // 时间戳改变,毫秒内序列重置 + else { + sequence = 0L; + } + + // 上次生成ID的时间截 + lastTimestamp = timestamp; + + // 移位并通过或运算拼到一起组成64位的ID + return ((timestamp - twepoch) << timestampLeftShift) // + | (machineId << getMachineIdShift) // + | sequence; + } + + /** + * 返回以毫秒为单位的当前时间 + * + * @return 当前时间(毫秒) + */ + protected long timeGen() { + return System.currentTimeMillis(); + } + +} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java new file mode 100644 index 00000000..2749932d --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java @@ -0,0 +1,80 @@ +package com.xxl.job.admin.core.id.impl; + +import com.xxl.job.admin.core.id.service.MachineService; +import com.xxl.job.admin.core.model.XxlJobMachine; +import com.xxl.job.admin.core.util.MachineUtils; +import com.xxl.job.admin.dao.XxlJobMachineDao; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.Random; + +@Service +public class MachineServiceImpl implements MachineService { + + private final Logger logger = LoggerFactory.getLogger(MachineServiceImpl.class); + + @Autowired + private XxlJobMachineDao xxlJobMachineDao; + + @Override + public void save(XxlJobMachine xxlJobMachine) { + xxlJobMachineDao.save(xxlJobMachine); + } + + @Override + public void update(String machineIp, Date heartLastTime) { + xxlJobMachineDao.update(machineIp,heartLastTime); + } + + @Override + public XxlJobMachine selectByMachineIp(String machineIp) { + return xxlJobMachineDao.selectByHostIp(machineIp); + } + + @Override + public Integer selectMaxMachineId() { + return xxlJobMachineDao.selectMaxMachineId(); + } + + @Override + public Integer getInitMachineId() { + XxlJobMachine xxlJobMachine = selectByMachineIp(MachineUtils.get()); + Date nowDate = new Date(); + int machineId = -1; + if(xxlJobMachine != null){ + update(MachineUtils.get(),nowDate); + machineId = xxlJobMachine.getMachineId(); + }else{ + xxlJobMachine = new XxlJobMachine(); + xxlJobMachine.setMachineIp(MachineUtils.get()); + xxlJobMachine.setAddTime(nowDate); + xxlJobMachine.setHeartLastTime(nowDate); + Random random = new Random(); + for(int i = 0; i < 100; i++){ + try { + Integer value = selectMaxMachineId(); + machineId = value == null ? 1 : value+1; + xxlJobMachine.setMachineId(machineId); + save(xxlJobMachine); + break; + } catch (DuplicateKeyException e) { + try { + Thread.sleep(random.nextInt(1000)+1); + } catch (InterruptedException interruptedException) { + logger.error("sleep error,cause:",interruptedException); + } + logger.error("retry >>>>>>>>>>>>> "); + } catch (Exception e){ + logger.error("save error >>>>>>,system exit,cause:",e); + System.exit(0); + } + } + } + return machineId; + } +} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/service/MachineService.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/service/MachineService.java new file mode 100644 index 00000000..d02f10e9 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/service/MachineService.java @@ -0,0 +1,18 @@ +package com.xxl.job.admin.core.id.service; + +import com.xxl.job.admin.core.model.XxlJobMachine; + +import java.util.Date; + +public interface MachineService { + + void save(XxlJobMachine xxlJobMachine); + + void update(String machineIp, Date heartLastTime); + + XxlJobMachine selectByMachineIp(String machineIp); + + Integer selectMaxMachineId(); + + Integer getInitMachineId(); +} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobMachine.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobMachine.java new file mode 100644 index 00000000..e4193af0 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobMachine.java @@ -0,0 +1,58 @@ +package com.xxl.job.admin.core.model; + +import java.util.Date; + +public class XxlJobMachine { + + /** + * 主机IP + */ + private String machineIp; + + /** + * 主机IP对应的机器码 + */ + private Integer machineId; + + /** + * 创建时间 + */ + private Date addTime; + + /** + * 最后一次心跳时间 + */ + private Date heartLastTime; + + public Date getHeartLastTime() { + return heartLastTime; + } + + public void setHeartLastTime(Date heartLastTime) { + this.heartLastTime = heartLastTime; + } + + public Integer getMachineId() { + return machineId; + } + + public void setMachineId(Integer machineId) { + this.machineId = machineId; + } + + public Date getAddTime() { + return addTime; + } + + public void setAddTime(Date addTime) { + this.addTime = addTime; + } + + public String getMachineIp() { + return machineIp; + } + + public void setMachineIp(String machineIp) { + this.machineIp = machineIp; + } +} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java new file mode 100644 index 00000000..703443b2 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java @@ -0,0 +1,27 @@ +package com.xxl.job.admin.core.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +public class MachineUtils { + + private static final Logger logger = LoggerFactory.getLogger(MachineUtils.class); + + private static String machineIp = null; + + public static String get() { + if(machineIp == null){ + try { + //获取本机IP地址 + machineIp = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + logger.error("get host error:",e); + throw new RuntimeException("get host error"); + } + } + return machineIp; + } +} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobMachineDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobMachineDao.java new file mode 100644 index 00000000..88ac0aae --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobMachineDao.java @@ -0,0 +1,20 @@ +package com.xxl.job.admin.dao; + +import com.xxl.job.admin.core.model.XxlJobMachine; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; + +@Mapper +public interface XxlJobMachineDao { + + void save(@Param("xxlJobMachine")XxlJobMachine xxlJobMachine); + + void update(@Param("machineIp") String machineIp, @Param("heartLastTime") Date heartLastTime); + + XxlJobMachine selectByHostIp(String machineIp); + + Integer selectMaxMachineId(); + +} diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobMachineMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobMachineMapper.xml new file mode 100644 index 00000000..7bd2fcd4 --- /dev/null +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobMachineMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + machine_ip,machine_id,add_time,heart_last_time + + + + + + INSERT INTO xxl_job_machine ( machine_ip, machine_id, add_time, heart_last_time) + VALUES ( #{xxlJobMachine.machineIp}, #{xxlJobMachine.machineId}, #{xxlJobMachine.addTime,jdbcType=TIMESTAMP}, #{xxlJobMachine.heartLastTime,jdbcType=TIMESTAMP}) + + + + UPDATE xxl_job_machine + SET heart_last_time = #{heartLastTime,jdbcType=TIMESTAMP} + WHERE machine_ip = #{machineIp} + + + + + \ No newline at end of file From b036e372a261040d5bb6a2d27a78822cbea29a21 Mon Sep 17 00:00:00 2001 From: zhangjf <1204698504@qq.com> Date: Fri, 3 Jul 2020 14:10:35 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E9=80=82=E9=85=8DOracle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.properties | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/xxl-job-admin/src/main/resources/application.properties b/xxl-job-admin/src/main/resources/application.properties index 80dffb4a..37dd1969 100644 --- a/xxl-job-admin/src/main/resources/application.properties +++ b/xxl-job-admin/src/main/resources/application.properties @@ -25,19 +25,20 @@ logging.level.com.xxl.job.admin.dao.XxlJobLogDao=debug logging.level.com.xxl.job.admin.dao.XxlJobRegistryDao=debug logging.level.com.xxl.job.admin.dao.XxlJobLogReportDao=debug -### xxl-job, datasource -#spring.datasource.url=jdbc:mysql://192.168.1.116:3306/xxl_job_220?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai -#spring.datasource.username=root -#spring.datasource.password=root@123 +### xxl-job, mysql datasource +#spring.datasource.url=jdbc:xxxxxxx +#spring.datasource.username=xxxxxxx +#spring.datasource.password=xxxxxxx #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #spring.datasource.hikari.connection-test-query=SELECT 1 #pagehelper.helper-dialect=mysql -spring.datasource.url = jdbc:oracle:thin:@192.168.1.99:1521/orcl -spring.datasource.username=upms -spring.datasource.password=upms123456 +### xxl-job, oracle datasource +spring.datasource.url = xxxxxxx +spring.datasource.username=xxxxxxx +spring.datasource.password=xxxxxxx spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver -#spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL +spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL pagehelper.helper-dialect=oracle mybatis.configuration.jdbc-type-for-null=NULL @@ -50,7 +51,6 @@ spring.datasource.hikari.idle-timeout=30000 spring.datasource.hikari.pool-name=HikariCP spring.datasource.hikari.max-lifetime=900000 spring.datasource.hikari.connection-timeout=10000 -#spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL ### xxl-job, email spring.mail.host=smtp.qq.com From 8a34f838c0fab117f7044c6c4ff6157335825291 Mon Sep 17 00:00:00 2001 From: shanhy Date: Tue, 14 Jul 2020 16:57:15 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BF=BD=E7=95=A5?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/.gitignore b/.gitignore index 52c1b008..3f3d40be 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,32 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/** +!**/src/test/** .idea +### STS ### +.apt_generated .classpath +.factorypath .project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws *.iml +*.ipr target/ .DS_Store +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ .gitattributes +### VS Code ### +.vscode/ From 3b6f8d58b5b58316458d1472093dd7387b625013 Mon Sep 17 00:00:00 2001 From: shanhy Date: Tue, 14 Jul 2020 19:07:14 +0800 Subject: [PATCH 09/16] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xxl-job-admin/src/main/resources/application.properties | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/xxl-job-admin/src/main/resources/application.properties b/xxl-job-admin/src/main/resources/application.properties index 37dd1969..1b6ace89 100644 --- a/xxl-job-admin/src/main/resources/application.properties +++ b/xxl-job-admin/src/main/resources/application.properties @@ -20,18 +20,21 @@ spring.freemarker.settings.number_format=0.########## ### mybatis mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml +mybatis.configuration.jdbc-type-for-null=NULL #mybatis.type-aliases-package=com.xxl.job.admin.core.model logging.level.com.xxl.job.admin.dao.XxlJobLogDao=debug logging.level.com.xxl.job.admin.dao.XxlJobRegistryDao=debug logging.level.com.xxl.job.admin.dao.XxlJobLogReportDao=debug +### pagehelper +pagehelper.auto-runtime-dialect=true + ### xxl-job, mysql datasource #spring.datasource.url=jdbc:xxxxxxx #spring.datasource.username=xxxxxxx #spring.datasource.password=xxxxxxx #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #spring.datasource.hikari.connection-test-query=SELECT 1 -#pagehelper.helper-dialect=mysql ### xxl-job, oracle datasource spring.datasource.url = xxxxxxx @@ -39,8 +42,6 @@ spring.datasource.username=xxxxxxx spring.datasource.password=xxxxxxx spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL -pagehelper.helper-dialect=oracle -mybatis.configuration.jdbc-type-for-null=NULL ### datasource-pool spring.datasource.type=com.zaxxer.hikari.HikariDataSource @@ -63,7 +64,7 @@ spring.mail.properties.mail.smtp.starttls.required=true spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory ### xxl-job, access token -xxl.job.accessToken= +d= ### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en") xxl.job.i18n=zh_CN From 41ab39d60077540f8957dc03731c1d7c4337da65 Mon Sep 17 00:00:00 2001 From: shanhy Date: Tue, 14 Jul 2020 19:10:51 +0800 Subject: [PATCH 10/16] =?UTF-8?q?=E8=BF=98=E5=8E=9FMysql=E9=BB=98=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.properties | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/xxl-job-admin/src/main/resources/application.properties b/xxl-job-admin/src/main/resources/application.properties index 1b6ace89..656dfee4 100644 --- a/xxl-job-admin/src/main/resources/application.properties +++ b/xxl-job-admin/src/main/resources/application.properties @@ -30,18 +30,18 @@ logging.level.com.xxl.job.admin.dao.XxlJobLogReportDao=debug pagehelper.auto-runtime-dialect=true ### xxl-job, mysql datasource -#spring.datasource.url=jdbc:xxxxxxx -#spring.datasource.username=xxxxxxx -#spring.datasource.password=xxxxxxx -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -#spring.datasource.hikari.connection-test-query=SELECT 1 - -### xxl-job, oracle datasource -spring.datasource.url = xxxxxxx +spring.datasource.url=jdbc:xxxxxxx spring.datasource.username=xxxxxxx spring.datasource.password=xxxxxxx -spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver -spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.hikari.connection-test-query=SELECT 1 + +### xxl-job, oracle datasource +#spring.datasource.url = xxxxxxx +#spring.datasource.username=xxxxxxx +#spring.datasource.password=xxxxxxx +#spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver +#spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL ### datasource-pool spring.datasource.type=com.zaxxer.hikari.HikariDataSource From c596229d8876e675e0650fc7347c3be73f99232d Mon Sep 17 00:00:00 2001 From: shanhy Date: Tue, 14 Jul 2020 19:19:36 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E8=84=9A=E6=9C=AC=E5=8E=BB=E9=99=A4?= =?UTF-8?q?=E8=87=AA=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/db/tables_xxl_job.sql | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index dc4309c5..64af82d0 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -8,7 +8,7 @@ use `xxl_job`; SET NAMES utf8mb4; CREATE TABLE `xxl_job_info` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL `job_group` int(11) NOT NULL COMMENT '执行器主键ID', `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON', `job_desc` varchar(255) NOT NULL, @@ -34,7 +34,7 @@ CREATE TABLE `xxl_job_info` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_log` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL `job_group` int(11) NOT NULL COMMENT '执行器主键ID', `job_id` int(11) NOT NULL COMMENT '任务,主键ID', `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址', @@ -55,7 +55,7 @@ CREATE TABLE `xxl_job_log` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_log_report` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间', `running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量', `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量', @@ -65,7 +65,7 @@ CREATE TABLE `xxl_job_log_report` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_logglue` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL `job_id` int(11) NOT NULL COMMENT '任务,主键ID', `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型', `glue_source` mediumtext COMMENT 'GLUE源代码', @@ -76,7 +76,7 @@ CREATE TABLE `xxl_job_logglue` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_registry` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL `registry_group` varchar(50) NOT NULL, `registry_key` varchar(255) NOT NULL, `registry_value` varchar(255) NOT NULL, @@ -86,7 +86,7 @@ CREATE TABLE `xxl_job_registry` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_group` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL `app_name` varchar(64) NOT NULL COMMENT '执行器AppName', `title` varchar(12) NOT NULL COMMENT '执行器名称', `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入', @@ -95,7 +95,7 @@ CREATE TABLE `xxl_job_group` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_user` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL `username` varchar(50) NOT NULL COMMENT '账号', `password` varchar(50) NOT NULL COMMENT '密码', `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员', From 3d9252115b2ab68a06eb2193e94ffbb7d5e525e1 Mon Sep 17 00:00:00 2001 From: shanhy Date: Tue, 14 Jul 2020 20:51:32 +0800 Subject: [PATCH 12/16] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8IP=E5=9C=B0=E5=9D=80BUG=E4=BF=AE=E6=94=B9=EF=BC=88?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=AE=B9=E5=99=A8=E7=BD=91=E7=BB=9C=E6=97=B6?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E8=8E=B7=E5=8F=96IP=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E6=88=90HOST=E7=BD=91=E7=BB=9C=E6=A8=A1=E5=BC=8F=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E4=B8=8D=E5=88=B0=EF=BC=89=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=86=E8=BF=99=E4=B8=AABUG=EF=BC=8C=E7=8E=B0=E5=9C=A8?= =?UTF-8?q?=E9=83=BD=E5=8F=AF=E4=BB=A5=E8=8E=B7=E5=8F=96=E5=88=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xxl/job/admin/core/id/HeartBeat.java | 29 ++++---- .../core/id/impl/MachineServiceImpl.java | 6 +- .../xxl/job/admin/core/util/MachineUtils.java | 67 +++++++++++++------ 3 files changed, 66 insertions(+), 36 deletions(-) diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java index 5c6d9741..3bc9f5bb 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java @@ -1,28 +1,29 @@ package com.xxl.job.admin.core.id; -import com.xxl.job.admin.core.id.service.MachineService; -import com.xxl.job.admin.core.model.XxlJobMachine; -import com.xxl.job.admin.core.util.MachineUtils; +import java.util.Date; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import java.util.Date; +import com.xxl.job.admin.core.id.service.MachineService; +import com.xxl.job.admin.core.model.XxlJobMachine; +import com.xxl.job.admin.core.util.MachineUtils; @Component @EnableScheduling public class HeartBeat { - @Autowired - private MachineService machineService; + @Autowired + private MachineService machineService; - @Scheduled(fixedDelay = 10000) - public void checkMachineSurvive(){ - String machineIp = MachineUtils.get(); - XxlJobMachine xxlJobMachine = machineService.selectByMachineIp(machineIp); - if(xxlJobMachine != null){ - machineService.update(machineIp,new Date()); - } - } + @Scheduled(fixedDelay = 10000) + public void checkMachineSurvive() { + String machineIp = MachineUtils.getIP(); + XxlJobMachine xxlJobMachine = machineService.selectByMachineIp(machineIp); + if (xxlJobMachine != null) { + machineService.update(machineIp, new Date()); + } + } } \ No newline at end of file diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java index 2749932d..7488e274 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java @@ -43,15 +43,15 @@ public class MachineServiceImpl implements MachineService { @Override public Integer getInitMachineId() { - XxlJobMachine xxlJobMachine = selectByMachineIp(MachineUtils.get()); + XxlJobMachine xxlJobMachine = selectByMachineIp(MachineUtils.getIP()); Date nowDate = new Date(); int machineId = -1; if(xxlJobMachine != null){ - update(MachineUtils.get(),nowDate); + update(MachineUtils.getIP(),nowDate); machineId = xxlJobMachine.getMachineId(); }else{ xxlJobMachine = new XxlJobMachine(); - xxlJobMachine.setMachineIp(MachineUtils.get()); + xxlJobMachine.setMachineIp(MachineUtils.getIP()); xxlJobMachine.setAddTime(nowDate); xxlJobMachine.setHeartLastTime(nowDate); Random random = new Random(); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java index 703443b2..98fdd731 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java @@ -1,27 +1,56 @@ package com.xxl.job.admin.core.util; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.util.Enumeration; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.net.InetAddress; -import java.net.UnknownHostException; - +/** + * 机器工具类 + * @author 单红宇 + * + */ public class MachineUtils { - private static final Logger logger = LoggerFactory.getLogger(MachineUtils.class); - - private static String machineIp = null; - - public static String get() { - if(machineIp == null){ - try { - //获取本机IP地址 - machineIp = InetAddress.getLocalHost().getHostAddress(); - } catch (UnknownHostException e) { - logger.error("get host error:",e); - throw new RuntimeException("get host error"); - } - } - return machineIp; - } + private static final Logger logger = LoggerFactory.getLogger(MachineUtils.class); + + private static String machineIp = null; + + public static String getIP() { + if (machineIp == null) { + String ipv4 = getInet4Address(); + logger.info("ipv4={}", ipv4); + machineIp = ipv4; + } + return machineIp; + } + + /** + * 获取服务器Ipv4地址 + */ + public static String getInet4Address() { + Enumeration nis; + String ip = null; + try { + nis = NetworkInterface.getNetworkInterfaces(); + for (; nis.hasMoreElements();) { + NetworkInterface ni = nis.nextElement(); + Enumeration ias = ni.getInetAddresses(); + for (; ias.hasMoreElements();) { + InetAddress ia = ias.nextElement(); + // ia instanceof Inet6Address && !ia.equals("") + if (ia instanceof Inet4Address && !ia.getHostAddress().equals("127.0.0.1")) { + ip = ia.getHostAddress(); + } + } + } + } catch (Exception e) { + logger.error("getServerIpAddress执行出错:" + e.getMessage() + "," + e.getCause()); + } + return ip; + } + } From 71cd96944cb460bdffff4b92c312102049b11c5c Mon Sep 17 00:00:00 2001 From: shanhy Date: Wed, 15 Jul 2020 08:47:54 +0800 Subject: [PATCH 13/16] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=EF=BC=8C=E5=8E=BB=E9=99=A4=E8=84=9A=E6=9C=AC=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E8=87=AA=E5=A2=9E=202=E3=80=81=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E4=B8=AD=E6=B7=BB=E5=8A=A0=E5=94=AF=E4=B8=80=E7=B4=A2=E5=BC=95?= =?UTF-8?q?=203=E3=80=81=E6=95=B0=E6=8D=AE=E5=BA=93=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E7=9A=84=E5=86=85=E5=AE=B9=E4=BC=98=E5=8C=96=E4=B8=BA=EF=BC=9A?= =?UTF-8?q?IP:=E7=AB=AF=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/db/tables_xxl_job.sql | 5 +-- doc/db/tables_xxl_job_oracle.sql | 5 ++- .../admin/controller/JobApiController.java | 31 +++++++++++++------ .../com/xxl/job/admin/core/id/HeartBeat.java | 10 ++++-- .../core/id/impl/MachineServiceImpl.java | 20 +++++++++--- .../xxl/job/admin/core/util/MachineUtils.java | 4 +++ 6 files changed, 55 insertions(+), 20 deletions(-) diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index 64af82d0..2aa94a91 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -111,10 +111,11 @@ CREATE TABLE `xxl_job_lock` ( CREATE TABLE `xxl_job_machine` ( `machine_ip` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主机IP', - `machine_id` int(11) NOT NULL COMMENT '主机IP对应的机器码', + `machine_id` int(4) NOT NULL COMMENT '主机IP对应的机器码', `add_time` datetime NOT NULL COMMENT '创建时间', `heart_last_time` datetime NOT NULL COMMENT '最后一次心跳时间', - PRIMARY KEY (`machine_ip`) USING BTREE + PRIMARY KEY (`machine_ip`) USING BTREE, + UNIQUE INDEX `index_machine_id`(`machine_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/doc/db/tables_xxl_job_oracle.sql b/doc/db/tables_xxl_job_oracle.sql index 6f8569f6..a7a82265 100644 --- a/doc/db/tables_xxl_job_oracle.sql +++ b/doc/db/tables_xxl_job_oracle.sql @@ -270,7 +270,7 @@ CREATE UNIQUE INDEX I_USERNAME DROP TABLE XXL_JOB_MACHINE; CREATE TABLE XXL_JOB_MACHINE ( MACHINE_IP NVARCHAR2(16) NOT NULL , - MACHINE_ID NUMBER(11) NOT NULL , + MACHINE_ID NUMBER(4) NOT NULL , ADD_TIME DATE NOT NULL , HEART_LAST_TIME DATE NOT NULL ); @@ -284,6 +284,9 @@ COMMENT ON COLUMN XXL_JOB_MACHINE.HEART_LAST_TIME IS '最后一次心跳时间'; -- ---------------------------- ALTER TABLE XXL_JOB_MACHINE ADD CONSTRAINT SYS_C0026684 PRIMARY KEY (MACHINE_IP); +CREATE UNIQUE INDEX I_MACHINE_ID + ON XXL_JOB_MACHINE (MACHINE_ID ASC); + -- ---------------------------- -- Checks structure for table XXL_JOB_MACHINE -- ---------------------------- diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java index aa51e739..2b5cbad7 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java @@ -1,22 +1,26 @@ package com.xxl.job.admin.controller; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + import com.xxl.job.admin.controller.annotation.PermissionLimit; import com.xxl.job.admin.core.conf.XxlJobAdminConfig; +import com.xxl.job.admin.core.model.XxlJobInfo; +import com.xxl.job.admin.service.XxlJobService; import com.xxl.job.core.biz.AdminBiz; import com.xxl.job.core.biz.model.HandleCallbackParam; import com.xxl.job.core.biz.model.RegistryParam; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.util.GsonTool; import com.xxl.job.core.util.XxlJobRemotingUtil; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import java.util.List; /** * Created by xuxueli on 17/5/10. @@ -28,6 +32,9 @@ public class JobApiController { @Resource private AdminBiz adminBiz; + @Resource + private XxlJobService xxlJobService; + /** * api * @@ -63,6 +70,12 @@ public class JobApiController { } else if ("registryRemove".equals(uri)) { RegistryParam registryParam = GsonTool.fromJson(data, RegistryParam.class); return adminBiz.registryRemove(registryParam); + } else if ("jobInfoAdd".equals(uri)) { + XxlJobInfo jobInfo = GsonTool.fromJson(data, XxlJobInfo.class); + return xxlJobService.add(jobInfo); + } else if ("jobInfoRemove".equals(uri)) { + XxlJobInfo jobInfo = GsonTool.fromJson(data, XxlJobInfo.class); + return xxlJobService.remove(jobInfo.getId()); } else { return new ReturnT(ReturnT.FAIL_CODE, "invalid request, uri-mapping("+ uri +") not found."); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java index 3bc9f5bb..c1052076 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java @@ -3,6 +3,7 @@ package com.xxl.job.admin.core.id; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -15,15 +16,18 @@ import com.xxl.job.admin.core.util.MachineUtils; @EnableScheduling public class HeartBeat { + @Value("${server.port}") + private String serverPort; + @Autowired private MachineService machineService; @Scheduled(fixedDelay = 10000) public void checkMachineSurvive() { - String machineIp = MachineUtils.getIP(); - XxlJobMachine xxlJobMachine = machineService.selectByMachineIp(machineIp); + String machineIpStr = MachineUtils.getIPAndPort(serverPort); + XxlJobMachine xxlJobMachine = machineService.selectByMachineIp(machineIpStr); if (xxlJobMachine != null) { - machineService.update(machineIp, new Date()); + machineService.update(machineIpStr, new Date()); } } } \ No newline at end of file diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java index 7488e274..79b281cf 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java @@ -7,6 +7,7 @@ import com.xxl.job.admin.dao.XxlJobMachineDao; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; @@ -18,6 +19,9 @@ public class MachineServiceImpl implements MachineService { private final Logger logger = LoggerFactory.getLogger(MachineServiceImpl.class); + @Value("${server.port}") + private String serverPort; + @Autowired private XxlJobMachineDao xxlJobMachineDao; @@ -43,37 +47,43 @@ public class MachineServiceImpl implements MachineService { @Override public Integer getInitMachineId() { - XxlJobMachine xxlJobMachine = selectByMachineIp(MachineUtils.getIP()); + String ipStr = MachineUtils.getIPAndPort(serverPort); + XxlJobMachine xxlJobMachine = selectByMachineIp(ipStr); Date nowDate = new Date(); int machineId = -1; if(xxlJobMachine != null){ - update(MachineUtils.getIP(),nowDate); + update(ipStr,nowDate); machineId = xxlJobMachine.getMachineId(); }else{ xxlJobMachine = new XxlJobMachine(); - xxlJobMachine.setMachineIp(MachineUtils.getIP()); + xxlJobMachine.setMachineIp(ipStr); xxlJobMachine.setAddTime(nowDate); xxlJobMachine.setHeartLastTime(nowDate); Random random = new Random(); + boolean flag = false; for(int i = 0; i < 100; i++){ try { Integer value = selectMaxMachineId(); machineId = value == null ? 1 : value+1; xxlJobMachine.setMachineId(machineId); save(xxlJobMachine); + flag = true; break; } catch (DuplicateKeyException e) { try { - Thread.sleep(random.nextInt(1000)+1); + Thread.sleep(random.nextInt(2000)+1); } catch (InterruptedException interruptedException) { logger.error("sleep error,cause:",interruptedException); } logger.error("retry >>>>>>>>>>>>> "); } catch (Exception e){ logger.error("save error >>>>>>,system exit,cause:",e); - System.exit(0); } } + if(!flag) { + logger.error("多次获取machineId失败,退出程序"); + System.exit(0); + } } return machineId; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java index 98fdd731..5b664a5a 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java @@ -18,6 +18,10 @@ public class MachineUtils { private static final Logger logger = LoggerFactory.getLogger(MachineUtils.class); private static String machineIp = null; + + public static String getIPAndPort(String port) { + return getIP().concat(":").concat(port); + } public static String getIP() { if (machineIp == null) { From 387d455637f03dd04611bb6471227606cb309929 Mon Sep 17 00:00:00 2001 From: zhangjf <1204698504@qq.com> Date: Wed, 15 Jul 2020 09:06:01 +0800 Subject: [PATCH 14/16] =?UTF-8?q?=E8=84=9A=E6=9C=AC=E5=8F=98=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/db/tables_xxl_job.sql | 2 +- doc/db/tables_xxl_job_oracle.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index 2aa94a91..d438238c 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -110,7 +110,7 @@ CREATE TABLE `xxl_job_lock` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_machine` ( - `machine_ip` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主机IP', + `machine_ip` varchar(22) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主机IP', `machine_id` int(4) NOT NULL COMMENT '主机IP对应的机器码', `add_time` datetime NOT NULL COMMENT '创建时间', `heart_last_time` datetime NOT NULL COMMENT '最后一次心跳时间', diff --git a/doc/db/tables_xxl_job_oracle.sql b/doc/db/tables_xxl_job_oracle.sql index a7a82265..8c13a44d 100644 --- a/doc/db/tables_xxl_job_oracle.sql +++ b/doc/db/tables_xxl_job_oracle.sql @@ -269,7 +269,7 @@ CREATE UNIQUE INDEX I_USERNAME -- ---------------------------- DROP TABLE XXL_JOB_MACHINE; CREATE TABLE XXL_JOB_MACHINE ( - MACHINE_IP NVARCHAR2(16) NOT NULL , + MACHINE_IP NVARCHAR2(22) NOT NULL , MACHINE_ID NUMBER(4) NOT NULL , ADD_TIME DATE NOT NULL , HEART_LAST_TIME DATE NOT NULL From 6d56e61fe21f373f186bf95fe5b791c9dd6e78e3 Mon Sep 17 00:00:00 2001 From: shanhy Date: Wed, 15 Jul 2020 09:34:51 +0800 Subject: [PATCH 15/16] =?UTF-8?q?token=E8=A2=AB=E8=AF=AF=E5=88=A0=E4=BA=86?= =?UTF-8?q?=EF=BC=8C=E6=81=A2=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xxl-job-admin/src/main/resources/application.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xxl-job-admin/src/main/resources/application.properties b/xxl-job-admin/src/main/resources/application.properties index 656dfee4..18c4b28b 100644 --- a/xxl-job-admin/src/main/resources/application.properties +++ b/xxl-job-admin/src/main/resources/application.properties @@ -30,9 +30,9 @@ logging.level.com.xxl.job.admin.dao.XxlJobLogReportDao=debug pagehelper.auto-runtime-dialect=true ### xxl-job, mysql datasource -spring.datasource.url=jdbc:xxxxxxx -spring.datasource.username=xxxxxxx -spring.datasource.password=xxxxxxx +spring.datasource.url=jdbc:xxxxxxxx +spring.datasource.username=xxxxxxxxxx +spring.datasource.password=xxxxxxxx spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hikari.connection-test-query=SELECT 1 @@ -64,7 +64,7 @@ spring.mail.properties.mail.smtp.starttls.required=true spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory ### xxl-job, access token -d= +xxl.job.accessToken= ### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en") xxl.job.i18n=zh_CN From 31f1bc7a9885652d7b563ddc60ae9e1bab45b0c8 Mon Sep 17 00:00:00 2001 From: shanhy Date: Wed, 15 Jul 2020 10:23:33 +0800 Subject: [PATCH 16/16] =?UTF-8?q?json=20=20long=20=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=E7=B2=BE=E5=BA=A6=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/core/conf/JacksonConfigurer.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/JacksonConfigurer.java diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/JacksonConfigurer.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/JacksonConfigurer.java new file mode 100644 index 00000000..9e6248b1 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/JacksonConfigurer.java @@ -0,0 +1,27 @@ +package com.xxl.job.admin.core.conf; + +import java.math.BigDecimal; + +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +/** + * Json配置类,Long和BigDecimal过时,前端js会出现丢失精度问题 + * + * @author 单红宇 + * + */ +@Configuration +public class JacksonConfigurer { + + @Bean + public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { + return builder -> { + builder.serializerByType(BigDecimal.class, ToStringSerializer.instance); + builder.serializerByType(Long.TYPE, ToStringSerializer.instance); + }; + } +}