hyperf框架使用xxl-job任务调度中心

1、https://www.xuxueli.com/xxl-job/#google_vignette 官网有简述任务调度中心作用是什么

2、环境:

  • Maven3+
  • Jdk17+ (说明:版本3.x开始要求Jdk17;版本2.x及以下支持Jdk1.8。如对Jdk版本有诉求,可选择接入不同版本。)
  • Mysql8.0+

3、将源码仓库代码下载到本地,配置好数据库初始化SQL之后,解压源码,按照maven格式将源码导入IDE,使用maven进行编译即可,如果有不会java的话,我这里已经编译好了,直接下载使用,下载地址:

通过网盘分享的文件:xxl-job-admin-3.3.1.jar
链接: https://pan.baidu.com/s/1Cl-j54DdtkYV4RDULDCyDw 提取码: 6e5p
这个是解压好之后的jar包,同时还需要一个配置文件启动:

通过网盘分享的文件:application.properties
链接: https://pan.baidu.com/s/12bJXUUi4oF2m1sDcDNNCTA 提取码: fufa

配置文件中的配置:

### web
server.port=8080
server.servlet.context-path=/xxl-job-admin

### actuator
management.endpoints.web.base-path=/actuator
management.health.mail.enabled=false

### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.web.resources.static-locations=classpath:/static/

### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########
spring.freemarker.settings.new_builtin_class_resolver=safer

### mybatis
mybatis.mapper-locations=classpath:/mapper/*Mapper.xml

### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
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.validation-timeout=1000

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://192.168.10.36:20324/xiaoba?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=xiaoba
spring.datasource.password=MXERBFDW5is6Yes6
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.from=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
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=default_token

### xxl-job, timeout by second, default 3s
xxl.job.timeout=3

### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN

## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=300
xxl.job.triggerpool.slow.max=200

### xxl-job, log retention days
xxl.job.logretentiondays=30

### xxl-sso
xxl-sso.token.key=xxl_job_login_token
xxl-sso.token.timeout=604800000
xxl-sso.client.excluded.paths=
xxl-sso.client.login.path=/auth/login

配置文件中可以更改默认后台端口,mysql连接配置,邮箱等

将下载好之后的jar包和配置文件放在指定的目录之后启动:
启动的时候输入命令:

java -jar xxl-job-admin-3.3.1.jar --spring.config.location=/www/wwwroot/xxljob/config/application.properties

 

image

 启动之后输入后台地址:http://localhost:8080/xxl-job-admin/#/xxl-job-admin/joblog,localhost改为你服务器地址,默认的账号密码为:admin 和 123456,

image

 至此就完成了安装,接下来我们需要配置服务器自动启动:

touch /usr/lib/systemd/system/xxl-job.service
vi /usr/lib/systemd/system/xxl-job.service

#将下面的代码粘贴进去,
[Unit]
Description=DTM Distributed Transaction Manager
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/www/wwwroot/xxljob
ExecStart=/www/wwwroot/xxljob/start.sh
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

我们需要创建一个start.sh脚本文件:

#!/bin/bash
cd /www/wwwroot/xxljob

# 设置日志输出(可选,systemd 会自己捕获)
echo "Starting xxl-job..."

# 前台运行,让 systemd 管理进程
exec /www/server/java/jdk-21.0.2/bin/java -jar /www/wwwroot/xxljob/xxl-job-admin-3.3.1.jar --spring.config.location=/www/wwwroot/xxljob/config/application.properties
#然后启动:
systemctl enable xxl-job.service
systemctl daemon-reload
systemctl start xxl-job.service

至此,xxl-job开机自动启动配置就完成了

在hyperf框架中使用:

composer require hyperf/xxl-job-incubator
php bin/hyperf.php vendor:publish hyperf/xxl-job-incubator

安装好之后,配置生成的 xxl_job.php 文件:

<?php

declare(strict_types=1);
/**
 * This file is part of Hyperf.
 *
 * @link     https://www.hyperf.io
 * @document https://hyperf.wiki
 * @contact  group@hyperf.io
 * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
 */

use function Hyperf\Support\env;

return [
    'enable' => env('XXL_JOB_ENABLE', true),
    'admin_address' => env('XXL_JOB_ADMIN_ADDRESS', 'http://127.0.0.1:8080/xxl-job-admin'),
    'app_name' => env('XXL_JOB_APP_NAME', 'xxl-job-demo'),
    'access_token' => env('XXL_JOB_ACCESS_TOKEN', ''),
    'heartbeat' => env('XXL_JOB_HEARTBEAT', 30),
    'log_retention_days' => 30,
    'executor_server' => [
        // executor host (no Settings, automatically obtained)
        'host' => env('XXL_JOB_EXECUTOR_HOST'),
        // executor port
        'port' => env('XXL_JOB_EXECUTOR_PORT'),
        // executor prefix
        'prefix_url' => env('XXL_JOB_EXECUTOR_PREFIX_URL', 'php-xxl-job'),
    ],
    // execution mode: process or coroutine
    'execution_mode' => 'process',
    'guzzle_config' => [
        'headers' => [
            'charset' => 'UTF-8',
        ],
        'timeout' => 10,
    ],
    'file_logger' => [
        'dir' => BASE_PATH . '/runtime/xxl_job/logs/',
    ],
];

我们主要配置: 

XXL_JOB_ENABLE
XXL_JOB_ADMIN_ADDRESS
XXL_JOB_APP_NAME
XXL_JOB_ACCESS_TOKEN

这四个 其他的都不用动,其中 XXL_JOB_ACCESS_TOKEN要和调度中心的access_token一致,配置在调度中心的配置文件中配置好之后重新启动即可

xxl.job.accessToken=default_token

hyperf中具体使用方法:https://packagist.org/packages/hyperf/xxl-job-incubator 

调度中心新建执行器:

image

 

 任务管理中新增任务:

image

 然后在hyperf配置文件中填写好对应的执行器,后台地址,token等配置之后启动进程

image

image

 多台服务启动进程之后会自动向调度中心注册,并且不会出现多台服务器多次执行任务的情况,只是轮询方式其中一台服务器执行任务,至此调度中心完成

posted @ 2025-12-24 12:05  来碗酒喝  阅读(13)  评论(0)    收藏  举报