稷然如此

  • 首页
  • 文章分类
    • AI
    • Android
    • Java
    • Shell
    • Vue
    • C#
    • Python
    • 数据库
    • 组件
    • 其他
    • Game
  • 常用命令
    • Docker
    • Git
    • Linux
  • 操作系统
    • CentOS
    • Ubuntu
    • Windows
    • Kylin
  • 工具
    • IntelliJ IDEA
    • Visual Studio Code
稷然如此
不积跬步,无以至千里
  1. 首页
  2. 文章分类
  3. Java
  4. 正文

xxl-job 的集成及 Mysql 转 PostgresSql

2024年12月12日 572点热度 0人点赞
用到工具:
1.Mysql 数据库
2.PostgresSql 数据库
3.Navicat 数据库管理工具

1.克隆代码

git clone https://gitee.com/xuxueli0323/xxl-job.git

2.执行 sql 文件

注意:得有 mysql 数据库
使用 navicat 导入源码表结构文件:xxl-job\doc\db\tables_xxl_job.sql 至 mysql 数据库

3.创建数据库

创建 PostgresSql 数据库用户及库,当然,也可以将此表结构导入自己业务库,这样就不用再创建库。
# 进入容器
docker exec -it 容器名称或容器id /bin/bash

# 切换用户
su - postgres

# 执行 sql
psql

# 创建一个 xxl_job 用户,密码是 123456
CREATE USER xxl_job WITH PASSWORD '123456';

# 创建一个 xxl_job 数据库,属于 xxl_o=job 用户
CREATE DATABASE xxl_job OWNER xxl_job;

# 将 xxl_job 数据库授权给 xxl_job 用户
GRANT ALL PRIVILEGES ON DATABASE xxl_job TO xxl_job;

4.数据传输

5.修改数据表

对照 mysql 数据库表,修改所有表 int 类型默认值。

6.创建 seq

CREATE SEQUENCE xxl_job_user_id_seq START 1;
CREATE SEQUENCE xxl_job_info_id_seq START 1;
CREATE SEQUENCE xxl_job_log_id_seq START 1;
CREATE SEQUENCE xxl_job_log_report_id_seq START 1;
CREATE SEQUENCE xxl_job_logglue_id_seq START 1;
CREATE SEQUENCE xxl_job_registry_id_seq START 1;
CREATE SEQUENCE xxl_job_group_id_seq START 1;

7.设置主键自增

ALTER TABLE "public"."xxl_job_user" alter column ID set default nextval('xxl_job_user_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_info" alter column ID set default nextval('xxl_job_info_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_log" alter column ID set default nextval('xxl_job_log_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_log_report" alter column ID set default nextval('xxl_job_log_report_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_logglue" alter column ID set default nextval('xxl_job_logglue_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_registry" alter column ID set default nextval('xxl_job_registry_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_group" alter column ID set default nextval('xxl_job_group_id_seq'::regclass);

8.修改 pom.xml 依赖

Ⅰ、移除 mysql 依赖,留着也行
<!-- mysql -->
<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <version>${mysql-connector-j.version}</version>
</dependency>
Ⅱ、新增 postgressql 依赖
<!-- postgressql -->
<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <version>42.7.4</version>
</dependency>

9.修改 application.properties 配置文件

### 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

替换为

### xxl-job, datasource
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/xxl_job
spring.datasource.username=xxl_job
spring.datasource.password=123456
spring.datasource.driver-class-name=org.postgresql.Driver

10.修改 mybatis-mapper 下 xml 文件

  • 去掉转义符 ` ,可以用空格替换。
    • 注意 findLogReport 的语句需要修改为 as "xx" 。
  • 修改 LIMIT #{offset}, #{pagesize}  为  LIMIT #{pagesize} OFFSET #{offset} 。
  • 修改DATE_ADD(#{nowTime},INTERVAL - #{timeout} SECOND)  为  ((select NOW())-INTERVAL '${timeout} S') 。
  • 修改 WHERE !(  为  WHERE not ( 。

11.运行代码检查

默认访问地址:http://xxx.xxx.xxx.xxx:8080/xxl-job-admin/toLogin
默认账号:admin
默认密码:123456

12.测试

Ⅰ、pom 依赖
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.4.0</version>
</dependency>
Ⅱ、yaml 配置
# xll-job 配置项
xxl:
  job:
    enabled: true
    admin:
      addresses: http://127.0.0.1:8080/xxl-job-admin # 调度中心地址(如集群部署存在多个地址则用逗号分隔)执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
    executor:
      appname: ${spring.application.name} # 执行器 AppName
      ip: # 执行器IP:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
      port: 9999 # 执行器端口号:小于等于0则自动获取;默认端口为 9999,单机部署多个执行器时,注意要配置不同执行器端口;
      logpath: /akim-boot-server/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 :需要对该路径拥有读写权限;为空则使用默认路径;
      logretentiondays: -1 # 调度中心日志表数据保存天数 [选填]:过期日志自动清理;限制大于等于7时生效,否则, 如-1,关闭自动清理功能;
    accessToken: default_token # 调度中心通讯TOKEN [选填]:非空时启用
Ⅲ、自动配置
@ConfigurationProperties("xxl.job")
@Validated
@Data
public class XxlJobProperties {
    /**
     * 是否开启,默认为 true 关闭
     */
    private Boolean enabled = true;
    /**
     * 访问令牌
     */
    private String accessToken;
    /**
     * 控制器配置
     */
    @NotNull(message = "控制器配置不能为空")
    private AdminProperties admin;
    /**
     * 执行器配置
     */
    @NotNull(message = "执行器配置不能为空")
    private ExecutorProperties executor;

    /**
     * XXL-Job 调度器配置类
     */
    @Data
    @Valid
    public static class AdminProperties {
        /**
         * 调度器地址
         */
        @NotEmpty(message = "调度器地址不能为空")
        private String addresses;
    }

    /**
     * XXL-Job 执行器配置类
     */
    @Data
    @Valid
    public static class ExecutorProperties {
        /**
         * 应用名
         */
        @NotEmpty(message = "应用名不能为空")
        private String appName;
        /**
         * 执行器的 IP
         */
        private String ip;
        /**
         * 执行器的 Port
         */
        private Integer port = -1;
        /**
         * 日志地址
         */
        @NotEmpty(message = "日志地址不能为空")
        private String logPath;
        /**
         * 日志保留天数
         */
        private Integer logRetentionDays = 30;
    }
}
@AutoConfiguration
@ConditionalOnClass(XxlJobSpringExecutor.class)
@ConditionalOnProperty(prefix = "xxl.job", name = "enabled", havingValue = "true", matchIfMissing = true)
@EnableConfigurationProperties({XxlJobProperties.class})
@EnableScheduling // 开启 Spring 自带的定时任务
@Slf4j
public class AkimXxlJobAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public XxlJobExecutor xxlJobExecutor(XxlJobProperties properties) {
        log.info("[xxlJobExecutor][初始化 XXL-Job 执行器的配置]");
        XxlJobProperties.AdminProperties admin = properties.getAdmin();
        XxlJobProperties.ExecutorProperties executor = properties.getExecutor();

        // 初始化执行器
        XxlJobExecutor xxlJobExecutor = new XxlJobSpringExecutor();
        xxlJobExecutor.setIp(executor.getIp());
        xxlJobExecutor.setPort(executor.getPort());
        xxlJobExecutor.setAppname(executor.getAppName());
        xxlJobExecutor.setLogPath(executor.getLogPath());
        xxlJobExecutor.setLogRetentionDays(executor.getLogRetentionDays());
        xxlJobExecutor.setAdminAddresses(admin.getAddresses());
        xxlJobExecutor.setAccessToken(properties.getAccessToken());
        return xxlJobExecutor;
    }
}
Ⅳ、测试类
@Component
@Slf4j
public class XxlJobDemo {
    @XxlJob("test-hhh")
    public void testHhh() {
        log.error("xxl-job-demo");
    }
}
Ⅴ、新增执行器
AppName 就是配置文件 application.yaml 的配置项 xxl.job.executor.appname
Ⅵ、新增任务
测试类  @XxlJob("test-hhh") 名称 test-hhh
Ⅶ、执行一次
标签: xxl-job
最后更新:2024年12月19日

Akim

犇 骉 Java、C#、Python、Go、Android、MiniProgram、Bootstrap、Vue2

点赞
< 上一篇
下一篇 >
文章目录
  • 1.克隆代码
  • 2.执行 sql 文件
  • 3.创建数据库
  • 4.数据传输
  • 5.修改数据表
  • 6.创建 seq
  • 7.设置主键自增
  • 8.修改 pom.xml 依赖
  • 9.修改 application.properties 配置文件
  • 10.修改 mybatis-mapper 下 xml 文件
  • 11.运行代码检查
  • 12.测试

Copyright © 2025 aianran.com All Rights Reserved.

免责申明 | 隐私政策 | 服务条款 | 关于我们

黔ICP备2023008200号-1

贵公网安备 52010202003594号