Skip to content

Commit 6644ab4

Browse files
committed
支持pgsql
1 parent 1f4ba7b commit 6644ab4

24 files changed

Lines changed: 1310 additions & 16 deletions

doc/db/tables_xxl_job_pgsql.sql

Lines changed: 293 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,293 @@
1+
-- XXL-JOB PostgreSQL Script
2+
-- Copyright (c) 2015-present, xuxueli.
3+
4+
-- 创建数据库(需要在外部执行,或者使用 psql 命令行)
5+
-- CREATE DATABASE xxl_job
6+
-- ENCODING 'UTF8'
7+
-- LC_COLLATE 'en_US.utf8'
8+
-- LC_CTYPE 'en_US.utf8';
9+
10+
-- \c xxl_job;
11+
12+
-- 设置客户端编码
13+
SET client_encoding = 'UTF8';
14+
15+
-- 如果有数据库,先转移所有权或删除数据库
16+
--REASSIGN OWNED BY xxl_job TO postgres; -- 将所有权转移给postgres
17+
--DROP DATABASE IF EXISTS xxl_job; -- 删除用户拥有的所有对象
18+
-- 最后删除用户
19+
--DROP USER IF EXISTS xxl_job;
20+
21+
-- 授予所有必要的权限
22+
GRANT ALL PRIVILEGES ON DATABASE xxl_job TO xxl_job;
23+
GRANT ALL PRIVILEGES ON SCHEMA public TO xxl_job;
24+
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO xxl_job;
25+
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO xxl_job;
26+
27+
-- 为将来创建的对象设置默认权限
28+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
29+
GRANT ALL PRIVILEGES ON TABLES TO xxl_job;
30+
31+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
32+
GRANT ALL PRIVILEGES ON SEQUENCES TO xxl_job;
33+
34+
-- 如果用户需要创建表
35+
GRANT CREATE ON SCHEMA public TO xxl_job;
36+
37+
-- —————————————————————— job group and registry ——————————————————
38+
39+
CREATE TABLE xxl_job_group
40+
(
41+
id SERIAL PRIMARY KEY,
42+
app_name VARCHAR(64) NOT NULL,
43+
title VARCHAR(12) NOT NULL,
44+
address_type SMALLINT NOT NULL DEFAULT 0,
45+
address_list TEXT,
46+
update_time TIMESTAMP
47+
);
48+
49+
COMMENT ON TABLE xxl_job_group IS '执行器信息表';
50+
COMMENT ON COLUMN xxl_job_group.id IS '主键ID';
51+
COMMENT ON COLUMN xxl_job_group.app_name IS '执行器AppName';
52+
COMMENT ON COLUMN xxl_job_group.title IS '执行器名称';
53+
COMMENT ON COLUMN xxl_job_group.address_type IS '执行器地址类型:0=自动注册、1=手动录入';
54+
COMMENT ON COLUMN xxl_job_group.address_list IS '执行器地址列表,多地址逗号分隔';
55+
COMMENT ON COLUMN xxl_job_group.update_time IS '更新时间';
56+
57+
CREATE TABLE xxl_job_registry
58+
(
59+
id SERIAL PRIMARY KEY,
60+
registry_group VARCHAR(50) NOT NULL,
61+
registry_key VARCHAR(255) NOT NULL,
62+
registry_value VARCHAR(255) NOT NULL,
63+
update_time TIMESTAMP
64+
);
65+
66+
CREATE UNIQUE INDEX idx_registry_group_key_value ON xxl_job_registry (registry_group, registry_key, registry_value);
67+
68+
COMMENT ON TABLE xxl_job_registry IS '执行器注册表';
69+
COMMENT ON COLUMN xxl_job_registry.id IS '主键ID';
70+
COMMENT ON COLUMN xxl_job_registry.registry_group IS '注册组';
71+
COMMENT ON COLUMN xxl_job_registry.registry_key IS '注册键';
72+
COMMENT ON COLUMN xxl_job_registry.registry_value IS '注册值';
73+
COMMENT ON COLUMN xxl_job_registry.update_time IS '更新时间';
74+
75+
-- —————————————————————— job info ——————————————————
76+
77+
CREATE TABLE xxl_job_info
78+
(
79+
id SERIAL PRIMARY KEY,
80+
job_group INTEGER NOT NULL,
81+
job_desc VARCHAR(255) NOT NULL,
82+
add_time TIMESTAMP,
83+
update_time TIMESTAMP,
84+
author VARCHAR(64),
85+
alarm_email VARCHAR(255),
86+
schedule_type VARCHAR(50) NOT NULL DEFAULT 'NONE',
87+
schedule_conf VARCHAR(128),
88+
misfire_strategy VARCHAR(50) NOT NULL DEFAULT 'DO_NOTHING',
89+
executor_route_strategy VARCHAR(50),
90+
executor_handler VARCHAR(255),
91+
executor_param VARCHAR(512),
92+
executor_block_strategy VARCHAR(50),
93+
executor_timeout INTEGER NOT NULL DEFAULT 0,
94+
executor_fail_retry_count INTEGER NOT NULL DEFAULT 0,
95+
glue_type VARCHAR(50) NOT NULL,
96+
glue_source TEXT,
97+
glue_remark VARCHAR(128),
98+
glue_updatetime TIMESTAMP,
99+
child_jobid VARCHAR(255),
100+
trigger_status SMALLINT NOT NULL DEFAULT 0,
101+
trigger_last_time BIGINT NOT NULL DEFAULT 0,
102+
trigger_next_time BIGINT NOT NULL DEFAULT 0
103+
);
104+
105+
COMMENT ON TABLE xxl_job_info IS '任务信息表';
106+
COMMENT ON COLUMN xxl_job_info.id IS '主键ID';
107+
COMMENT ON COLUMN xxl_job_info.job_group IS '执行器主键ID';
108+
COMMENT ON COLUMN xxl_job_info.job_desc IS '任务描述';
109+
COMMENT ON COLUMN xxl_job_info.add_time IS '添加时间';
110+
COMMENT ON COLUMN xxl_job_info.update_time IS '更新时间';
111+
COMMENT ON COLUMN xxl_job_info.author IS '作者';
112+
COMMENT ON COLUMN xxl_job_info.alarm_email IS '报警邮件';
113+
COMMENT ON COLUMN xxl_job_info.schedule_type IS '调度类型';
114+
COMMENT ON COLUMN xxl_job_info.schedule_conf IS '调度配置,值含义取决于调度类型';
115+
COMMENT ON COLUMN xxl_job_info.misfire_strategy IS '调度过期策略';
116+
COMMENT ON COLUMN xxl_job_info.executor_route_strategy IS '执行器路由策略';
117+
COMMENT ON COLUMN xxl_job_info.executor_handler IS '执行器任务handler';
118+
COMMENT ON COLUMN xxl_job_info.executor_param IS '执行器任务参数';
119+
COMMENT ON COLUMN xxl_job_info.executor_block_strategy IS '阻塞处理策略';
120+
COMMENT ON COLUMN xxl_job_info.executor_timeout IS '任务执行超时时间,单位秒';
121+
COMMENT ON COLUMN xxl_job_info.executor_fail_retry_count IS '失败重试次数';
122+
COMMENT ON COLUMN xxl_job_info.glue_type IS 'GLUE类型';
123+
COMMENT ON COLUMN xxl_job_info.glue_source IS 'GLUE源代码';
124+
COMMENT ON COLUMN xxl_job_info.glue_remark IS 'GLUE备注';
125+
COMMENT ON COLUMN xxl_job_info.glue_updatetime IS 'GLUE更新时间';
126+
COMMENT ON COLUMN xxl_job_info.child_jobid IS '子任务ID,多个逗号分隔';
127+
COMMENT ON COLUMN xxl_job_info.trigger_status IS '调度状态:0-停止,1-运行';
128+
COMMENT ON COLUMN xxl_job_info.trigger_last_time IS '上次调度时间';
129+
COMMENT ON COLUMN xxl_job_info.trigger_next_time IS '下次调度时间';
130+
131+
CREATE TABLE xxl_job_logglue
132+
(
133+
id SERIAL PRIMARY KEY,
134+
job_id INTEGER NOT NULL,
135+
glue_type VARCHAR(50),
136+
glue_source TEXT,
137+
glue_remark VARCHAR(128) NOT NULL,
138+
add_time TIMESTAMP,
139+
update_time TIMESTAMP
140+
);
141+
142+
COMMENT ON TABLE xxl_job_logglue IS '任务GLUE日志表';
143+
COMMENT ON COLUMN xxl_job_logglue.id IS '主键ID';
144+
COMMENT ON COLUMN xxl_job_logglue.job_id IS '任务,主键ID';
145+
COMMENT ON COLUMN xxl_job_logglue.glue_type IS 'GLUE类型';
146+
COMMENT ON COLUMN xxl_job_logglue.glue_source IS 'GLUE源代码';
147+
COMMENT ON COLUMN xxl_job_logglue.glue_remark IS 'GLUE备注';
148+
COMMENT ON COLUMN xxl_job_logglue.add_time IS '添加时间';
149+
COMMENT ON COLUMN xxl_job_logglue.update_time IS '更新时间';
150+
151+
-- —————————————————————— job log and report ——————————————————
152+
153+
CREATE TABLE xxl_job_log
154+
(
155+
id BIGSERIAL PRIMARY KEY,
156+
job_group INTEGER NOT NULL,
157+
job_id INTEGER NOT NULL,
158+
executor_address VARCHAR(255),
159+
executor_handler VARCHAR(255),
160+
executor_param VARCHAR(512),
161+
executor_sharding_param VARCHAR(20),
162+
executor_fail_retry_count INTEGER NOT NULL DEFAULT 0,
163+
trigger_time TIMESTAMP,
164+
trigger_code INTEGER NOT NULL,
165+
trigger_msg TEXT,
166+
handle_time TIMESTAMP,
167+
handle_code INTEGER NOT NULL,
168+
handle_msg TEXT,
169+
alarm_status SMALLINT NOT NULL DEFAULT 0
170+
);
171+
172+
CREATE INDEX idx_job_log_trigger_time ON xxl_job_log (trigger_time);
173+
CREATE INDEX idx_job_log_handle_code ON xxl_job_log (handle_code);
174+
CREATE INDEX idx_job_log_job_id_group ON xxl_job_log (job_id, job_group);
175+
CREATE INDEX idx_job_log_job_id ON xxl_job_log (job_id);
176+
177+
COMMENT ON TABLE xxl_job_log IS '任务日志表';
178+
COMMENT ON COLUMN xxl_job_log.id IS '主键ID';
179+
COMMENT ON COLUMN xxl_job_log.job_group IS '执行器主键ID';
180+
COMMENT ON COLUMN xxl_job_log.job_id IS '任务,主键ID';
181+
COMMENT ON COLUMN xxl_job_log.executor_address IS '执行器地址,本次执行的地址';
182+
COMMENT ON COLUMN xxl_job_log.executor_handler IS '执行器任务handler';
183+
COMMENT ON COLUMN xxl_job_log.executor_param IS '执行器任务参数';
184+
COMMENT ON COLUMN xxl_job_log.executor_sharding_param IS '执行器任务分片参数,格式如 1/2';
185+
COMMENT ON COLUMN xxl_job_log.executor_fail_retry_count IS '失败重试次数';
186+
COMMENT ON COLUMN xxl_job_log.trigger_time IS '调度-时间';
187+
COMMENT ON COLUMN xxl_job_log.trigger_code IS '调度-结果';
188+
COMMENT ON COLUMN xxl_job_log.trigger_msg IS '调度-日志';
189+
COMMENT ON COLUMN xxl_job_log.handle_time IS '执行-时间';
190+
COMMENT ON COLUMN xxl_job_log.handle_code IS '执行-状态';
191+
COMMENT ON COLUMN xxl_job_log.handle_msg IS '执行-日志';
192+
COMMENT ON COLUMN xxl_job_log.alarm_status IS '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败';
193+
194+
CREATE TABLE xxl_job_log_report
195+
(
196+
id SERIAL PRIMARY KEY,
197+
trigger_day TIMESTAMP,
198+
running_count INTEGER NOT NULL DEFAULT 0,
199+
suc_count INTEGER NOT NULL DEFAULT 0,
200+
fail_count INTEGER NOT NULL DEFAULT 0,
201+
update_time TIMESTAMP
202+
);
203+
204+
CREATE UNIQUE INDEX idx_log_report_trigger_day ON xxl_job_log_report (trigger_day);
205+
206+
COMMENT ON TABLE xxl_job_log_report IS '日志报告表';
207+
COMMENT ON COLUMN xxl_job_log_report.id IS '主键ID';
208+
COMMENT ON COLUMN xxl_job_log_report.trigger_day IS '调度-时间';
209+
COMMENT ON COLUMN xxl_job_log_report.running_count IS '运行中-日志数量';
210+
COMMENT ON COLUMN xxl_job_log_report.suc_count IS '执行成功-日志数量';
211+
COMMENT ON COLUMN xxl_job_log_report.fail_count IS '执行失败-日志数量';
212+
COMMENT ON COLUMN xxl_job_log_report.update_time IS '更新时间';
213+
214+
-- —————————————————————— lock ——————————————————
215+
216+
CREATE TABLE xxl_job_lock
217+
(
218+
lock_name VARCHAR(50) PRIMARY KEY
219+
);
220+
221+
COMMENT ON TABLE xxl_job_lock IS '分布式锁表';
222+
COMMENT ON COLUMN xxl_job_lock.lock_name IS '锁名称';
223+
224+
-- —————————————————————— user ——————————————————
225+
226+
CREATE TABLE xxl_job_user
227+
(
228+
id SERIAL PRIMARY KEY,
229+
username VARCHAR(50) NOT NULL,
230+
password VARCHAR(100) NOT NULL,
231+
token VARCHAR(100),
232+
role SMALLINT NOT NULL,
233+
permission VARCHAR(255)
234+
);
235+
236+
CREATE UNIQUE INDEX idx_user_username ON xxl_job_user (username);
237+
238+
COMMENT ON TABLE xxl_job_user IS '用户表';
239+
COMMENT ON COLUMN xxl_job_user.id IS '主键ID';
240+
COMMENT ON COLUMN xxl_job_user.username IS '账号';
241+
COMMENT ON COLUMN xxl_job_user.password IS '密码加密信息';
242+
COMMENT ON COLUMN xxl_job_user.token IS '登录token';
243+
COMMENT ON COLUMN xxl_job_user.role IS '角色:0-普通用户、1-管理员';
244+
COMMENT ON COLUMN xxl_job_user.permission IS '权限:执行器ID列表,多个逗号分割';
245+
246+
-- —————————————————————— for default data ——————————————————
247+
248+
INSERT INTO xxl_job_group (id, app_name, title, address_type, address_list, update_time)
249+
VALUES (1, 'xxl-job-executor-sample', '通用执行器Sample', 0, NULL, NOW()),
250+
(2, 'xxl-job-executor-sample-ai', 'AI执行器Sample', 0, NULL, NOW());
251+
252+
-- 设置序列的起始值
253+
SELECT setval('xxl_job_group_id_seq', (SELECT MAX(id) FROM xxl_job_group));
254+
255+
INSERT INTO xxl_job_info (id, job_group, job_desc, add_time, update_time, author, alarm_email,
256+
schedule_type, schedule_conf, misfire_strategy, executor_route_strategy,
257+
executor_handler, executor_param, executor_block_strategy, executor_timeout,
258+
executor_fail_retry_count, glue_type, glue_source, glue_remark, glue_updatetime,
259+
child_jobid)
260+
VALUES (1, 1, '示例任务01', NOW(), NOW(), 'XXL', '', 'CRON', '0 0 0 * * ? *',
261+
'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化',
262+
NOW(), ''),
263+
(2, 2, 'Ollama示例任务01', NOW(), NOW(), 'XXL', '', 'NONE', '',
264+
'DO_NOTHING', 'FIRST', 'ollamaJobHandler', '{
265+
"input": "慢SQL问题分析思路",
266+
"prompt": "你是一个研发工程师,擅长解决技术类问题。",
267+
"model": "qwen3:0.6b"
268+
}', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化',
269+
NOW(), ''),
270+
(3, 2, 'Dify示例任务', NOW(), NOW(), 'XXL', '', 'NONE', '',
271+
'DO_NOTHING', 'FIRST', 'difyWorkflowJobHandler', '{
272+
"inputs":{
273+
"input":"查询班级各学科前三名"
274+
},
275+
"user": "xxl-job",
276+
"baseUrl": "http://localhost/v1",
277+
"apiKey": "app-OUVgNUOQRIMokfmuJvBJoUTN"
278+
}', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化',
279+
NOW(), '');
280+
281+
-- 设置序列的起始值
282+
SELECT setval('xxl_job_info_id_seq', (SELECT MAX(id) FROM xxl_job_info));
283+
284+
INSERT INTO xxl_job_user (id, username, password, role, permission)
285+
VALUES (1, 'admin', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 1, NULL);
286+
287+
-- 设置序列的起始值
288+
SELECT setval('xxl_job_user_id_seq', (SELECT MAX(id) FROM xxl_job_user));
289+
290+
INSERT INTO xxl_job_lock (lock_name)
291+
VALUES ('schedule_lock');
292+
293+

docker/docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ services:
1414
- "3306:3306"
1515
volumes:
1616
# 说明:仅数据库首次初始化时执行;
17-
- ../doc/db/tables_xxl_job.sql:/docker-entrypoint-initdb.d/tables_xxl_job.sql:ro
17+
- ../doc/db/tables_xxl_job_mysql.sql:/docker-entrypoint-initdb.d/tables_xxl_job.sql:ro
1818
# 3、数据库持久化目录位置,建议自定义:
1919
- ${MYSQL_PATH}/conf:/etc/mysql/conf.d
2020
- ${MYSQL_PATH}/logs:/var/log/mysql

pom.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
<!-- mybatis & db -->
4444
<mybatis-spring-boot-starter.version>4.0.1</mybatis-spring-boot-starter.version>
4545
<mysql-connector-j.version>9.5.0</mysql-connector-j.version>
46+
<postgresql.version>42.7.8</postgresql.version>
4647

4748
<!-- net -->
4849
<netty.version>4.2.9.Final</netty.version>
@@ -141,12 +142,6 @@
141142
<artifactId>mybatis-spring-boot-starter</artifactId>
142143
<version>${mybatis-spring-boot-starter.version}</version>
143144
</dependency>
144-
<!-- mysql -->
145-
<dependency>
146-
<groupId>com.mysql</groupId>
147-
<artifactId>mysql-connector-j</artifactId>
148-
<version>${mysql-connector-j.version}</version>
149-
</dependency>
150145

151146
<!-- xxl-job-core -->
152147
<dependency>

xxl-job-admin/pom.xml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,35 @@
8585

8686
</plugins>
8787
</build>
88+
<profiles>
89+
<profile>
90+
<id>mysql</id>
91+
<activation>
92+
<activeByDefault>true</activeByDefault>
93+
</activation>
94+
<dependencies>
95+
<!-- mysql -->
96+
<dependency>
97+
<groupId>com.mysql</groupId>
98+
<artifactId>mysql-connector-j</artifactId>
99+
<version>${mysql-connector-j.version}</version>
100+
</dependency>
101+
</dependencies>
102+
</profile>
103+
<profile>
104+
<id>postgresql</id>
105+
<activation>
106+
<activeByDefault>false</activeByDefault>
107+
</activation>
108+
<dependencies>
109+
<!-- postgresql -->
110+
<dependency>
111+
<groupId>org.postgresql</groupId>
112+
<artifactId>postgresql</artifactId>
113+
<version>${postgresql.version}</version>
114+
</dependency>
115+
</dependencies>
116+
</profile>
117+
</profiles>
88118

89119
</project>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
### mybatis
2+
mybatis.mapper-locations=classpath:/mapper/mysql/*Mapper.xml
3+
4+
### xxl-job, datasource
5+
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
6+
spring.datasource.username=xxl_job
7+
spring.datasource.password=xxl_job
8+
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
### mybatis
2+
mybatis.mapper-locations=classpath:/mapper/postgresql/*Mapper.xml
3+
4+
### xxl-job, datasource
5+
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/xxl_job?currentSchema=public&stringtype=unspecified
6+
spring.datasource.username=xxl_job
7+
spring.datasource.password=xxl_job
8+
spring.datasource.driver-class-name=org.postgresql.Driver
9+

0 commit comments

Comments
 (0)