springboot项目中引入Xxl-Job并部署和使用

目录

模块划分

配置调度中心

配置执行器

添加执行器

写一个简单的定时任务

XxlJobHelper


xxl-job是分布式任务调度平台,部署为独立的调度服务平台

github地址:xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB) (github.com)

文档地址:分布式任务调度平台XXL-JOB (xuxueli.com)

bash 复制代码
git clone https://github.com/xuxueli/xxl-job.git

模块划分

在自己项目添加新模块,有利于项目的管理,父工程pom文件中添加:

html 复制代码
<!-- 对xxl-job单独做配置的模块  -->
​​<module>jungle-job</module>

<!-- 存放调度中心的模块  -->
<module>jungle-extends</module>

在job模块和extends模块中将父工程指向自己的父工程:

将下载的xxl-job源码中的xxl-job-admin模块拷贝到extends模块下,修改pom文件内容,父工程指向extends

maven导入调度中心模块:

最后模块依赖情况:

配置调度中心

初始化xxl-job数据库,在mysql数据库中执行sql脚本,调度平台的数据库初始化SQL脚本存放地址:

/xxl-job/doc/db/tables_xxl_job.sql

右键数据库连接,执行sql脚本,会创建xxl-job库并导入初始数据,

修改调度中心的数据库配置:

设置执行器注册token:

若想把.properties文件内容转成.yml文件内容,可以让GPT去生成。

启动调度中心:

添加services,找到springboot:

配置执行器

自己项目做为一个执行器,在job模块添加以下依赖:

html 复制代码
<!-- 你也可以引入你项目的其他模块,来间接引入以下依赖      -->          
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter</artifactId>
                    <version>2.5.5</version>
                </dependency>

依然xxl-job核心依赖:

html 复制代码
        <!-- xxl-job-core -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
        </dependency>

自己项目配置文件中添加自定义配置内容:

bash 复制代码
#========== xxl-job 自定义配置
xxl.job:
  # 执行器开关
  enabled: true
  # 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。
  admin-addresses: http://${custom.dev.ip}:9112/job-admin
  # 执行器通讯TOKEN:非空时启用,需与调度中心配置的一致
  access-token: xxl-job
  executor:
    # 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册
    appname: xxl-job-executor-${jungle.name}
    # 执行器端口号 执行器从9101开始往后写
    port: 9101
    # [选填]执行器注册:默认IP:PORT
    address: 
    # 选填]执行器IP:默认自动获取IP
    ip: 
    # 执行器运行日志文件存储磁盘路径
    logpath: ./logs/xxl-job
    # 执行器日志文件保存天数:大于3生效
    logretentiondays: 30

如果要指定执行器,可以设置address:http://172.20.5.122:9101

172.20.5.122为你要指定的执行器ip地址,端口9101往后写

job模块中添加属性配置类XxlJobProperties ,配置类 XxlJobConfig,添加执行器组件配置 XxlJobSpringExecutor

java 复制代码
//xxljob配置类
@Data
@ConfigurationProperties(prefix = "xxl.job")
public class XxlJobProperties {

    private Boolean enabled;

    private String adminAddresses;

    private String accessToken;

    private Executor executor;

    @Data
    @NoArgsConstructor
    public static class Executor {

        private String appname;

        private String address;

        private String ip;

        private int port;

        private String logPath;

        private int logRetentionDays;
    }
}
java 复制代码
//执行器组件配置
@Slf4j
@Configuration
@EnableConfigurationProperties(XxlJobProperties.class)
@AllArgsConstructor
//当名为 xxl.job.enabled 的属性值为 true 时,才会加载这个配置类
@ConditionalOnProperty(prefix = "xxl.job", name = "enabled", havingValue = "true") 
public class XxlJobConfig {

    private final XxlJobProperties xxlJobProperties;

    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        log.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdminAddresses());
        xxlJobSpringExecutor.setAccessToken(xxlJobProperties.getAccessToken());
        XxlJobProperties.Executor executor = xxlJobProperties.getExecutor();
        xxlJobSpringExecutor.setAppname(executor.getAppname());
        xxlJobSpringExecutor.setAddress(executor.getAddress());
        xxlJobSpringExecutor.setIp(executor.getIp());
        xxlJobSpringExecutor.setPort(executor.getPort());
        xxlJobSpringExecutor.setLogPath(executor.getLogPath());
        xxlJobSpringExecutor.setLogRetentionDays(executor.getLogRetentionDays());
        return xxlJobSpringExecutor;
    }

}

启动自己项目,看到以下日志,表示执行器注册成功

添加执行器

添加一个执行器,AppName与项目中自己配置的appname相同,执行器名字自己取,注册方式选择自动注册,点击保存

因为上面配置中ip并没有配置值,所以会自动获取ip,执行器启动后需要一会调度中心便会检测到,点击查看

自带的执行器可以删除了

写一个简单的定时任务

更多示例在.\xxl-job-master\xxl-job-executor-samples\xxl-job-executor-sample-springboot\src\main\java\com\xxl\job\executor\service\jobhandler目录下的SampleXxlJob

添加类:

java 复制代码
@Component //交给spring容器管理,让spring能够找到
public class DemoXxlJob {

    @XxlJob("demo_job_handler")
    public void demoJobHandler() {
        //在调度平台查看该日志
        XxlJobHelper.log("XXL-JOB, demo_job_handler 执行.");
        System.out.println("------> demoJobHandler execute success.");
    }

}

新增一个任务,带红色 * 的为必填项,这里我设置一个30s执行一次的任务

启动任务,也可手动触发一次任务执行(点击执行一次):

点击查询日志可看到:

XxlJobHelper

获取配置的任务参数:

java 复制代码
String jobParam = XxlJobHelper.getJobParam();

自定义任务成功或失败:

java 复制代码
        String jobParam = XxlJobHelper.getJobParam();
        if (jobParam!= null && jobParam.equals("1")){
            XxlJobHelper.handleSuccess("模拟业务成功");
        }else {
            XxlJobHelper.handleFail("模拟业务失败");
        }

成功:

失败:

部署至服务器上

使用Maven对整个项目打包,这样调度中心也会打包成jar包,在target目录下可以查看,可上传至服务器就行部署,也可以打包后使用调度中心模块下的dockerfile进行本地构建。

本地没有docker环境可以将dockerfile文件和jar包上传至服务器上构建,并修改一下jar包所在目录:

构建镜像:

bash 复制代码
#xuxueli/xxl-job-admin:v1镜像名和tag标签   ./xxl-job-admin是dockerfile所在目录
docker build -t xuxueli/xxl-job-admin:v1 ./xxl-job-admin

运行xxl-job容器:

bash 复制代码
sudo docker run --name xxl-job-admin -p 8080:8080 -d xuxueli/xxl-job-admin:v1
相关推荐
Mos_x几秒前
计算机组成原理核心知识点梳理
java·后端
墨寒博客栈4 分钟前
Linux基础常用命令
java·linux·运维·服务器·前端
回忆是昨天里的海8 分钟前
k8s-部署springboot容器化应用
java·容器·kubernetes
初见00116 分钟前
Git时间管理大师:Reset Current Branch to Here 全解析
git·后端
INFINI Labs20 分钟前
使用 Docker Compose 轻松实现 INFINI Console 离线部署与持久化管理
java·docker·eureka·devops·docker compose·console·easyserach
路多辛21 分钟前
为什么我要做一个开发者工具箱?聊聊 Kairoa 的诞生
前端·后端
Cosolar21 分钟前
国产麒麟系统 aarch64 架构 PostgreSQL 15 源码编译安装完整教程
java·后端
GalaxyPokemon28 分钟前
PlayerFeedback 插件开发日志
java·服务器·前端
苏三说技术1 小时前
聊聊防御式编程
后端
IT_陈寒1 小时前
SpringBoot 3.2新特性实战:这5个隐藏功能让开发效率翻倍🚀
前端·人工智能·后端