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

目录

模块划分

 配置调度中心

配置执行器

 添加执行器

写一个简单的定时任务

XxlJobHelper


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

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

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

git clone https://github.com/xuxueli/xxl-job.git

模块划分

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

<!-- 对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模块添加以下依赖:

<!-- 你也可以引入你项目的其他模块,来间接引入以下依赖      -->          
                <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核心依赖:

        <!-- xxl-job-core -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
        </dependency>

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

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

//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;
    }
}
//执行器组件配置
@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

添加类:

@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

 获取配置的任务参数:

String jobParam = XxlJobHelper.getJobParam();

自定义任务成功或失败:

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

 成功:

 失败:

部署至服务器上

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

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

构建镜像:

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

运行xxl-job容器:

sudo docker run --name xxl-job-admin -p 8080:8080 -d xuxueli/xxl-job-admin:v1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/605781.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【系统架构师】-案例篇-UML用例图

1、概述 用于表示系统功能需求&#xff0c;以及应用程序与用户或者与其他应用程序之间的交互关系。 2、组成 参与者&#xff08;Actors&#xff09;&#xff1a;与系统交互的用户或其他系统。用一个人形图标表示。用例&#xff08;Use Cases&#xff09;&#xff1a;系统需要…

谷歌Flank潜藏3年的Github Action供应链攻击

01 简 介 Flank [1] 是谷歌 Firebase Test lab 开源在 Github 的一个项目&#xff0c;用于同时对多个安卓和IOS设备进行测试。2024年4月15号 AWS 安全工程师 Adnan Khan 公布了关于该项目代码仓库 Github Action CI/CD 存在漏洞的细节[2]&#xff0c;漏洞在2020年于此 代码合…

20万元奖励!成都市2023年度工业企业稳规成长奖项目申报对象奖励、材料程序

一、申报对象及奖励标准 2020年度&#xff08;2020年3月—2021年2月&#xff09;首次进入成都市规模以上工业名录库的企业&#xff0c;自上规当年起连续两年&#xff08;2021—2022年&#xff09;年度营业收入均保持在15%&#xff08;含&#xff09;以上增速的&#xff0c;一次…

qt 5.15.x 安装android过程记录

1.经过好几天的qt for android 安装&#xff0c;发现存在很多坑 参考其他文章可以编译出APK文件。但是我发现(我的机器上)无法调试apk程序&#xff0c;不能调试那怎么行呢&#xff0c;看了很多文章都是运行出结果了就结束了。没有展示怎么调试程序。 很多文章都是建议安装JDK8…

通信算法之207: 位同步影响调试经验分享

位同步准确&#xff0c;FFT解调后波形&#xff1a; 位同步NO准确&#xff0c;FFT解调后波形&#xff1a; 哈哈哈 哈哈哈 位同步准确为不准确 不准确为准确

Pytorch常用的函数(九)torch.gather()用法

Pytorch常用的函数(九)torch.gather()用法 torch.gather() 就是在指定维度上收集value。 torch.gather() 的必填也是最常用的参数有三个&#xff0c;下面引用官方解释&#xff1a; input (Tensor) – the source tensordim (int) – the axis along which to indexindex (Lo…

android图标底色问题,debug与release不一致

背景 在android 8&#xff08;sdk 26&#xff09;之前的版本&#xff0c;直接使用图片文件作为图标&#xff0c;开发时比较容易控制图标&#xff0c;但是不同的安卓定制版本就不容易统一图标风格了。 在android 8及之后的版本&#xff0c;图标对应的是ic_launcher.xml&#x…

android权限申请说明

theme: condensed-night-purple 在Android开发中&#xff0c;权限是指应用程序需要访问特定的设备功能或数据时所需的用户许可。从Android 6.0&#xff08;API级别23&#xff09;开始&#xff0c;Android引入了运行时权限模型&#xff0c;在应用程序运行期间向用户请求权限&am…

2024年全国五大数学建模竞赛Top榜及难度分析!推荐数维杯!!!

发现最近许多同学都陆续开始准备今年的数学建模竞赛了&#xff0c;但是随着数学建模领域越来越普及&#xff0c;影响力越来越广泛&#xff0c;参加的同学也越来越多&#xff0c;就导致有越来越多各式各样的数学建模竞赛此起彼伏出现&#xff0c;但其中有一些竞赛其实并不值得参…

Github 50k star!吴恩达联合OpenAi共同编写<面向开发者的LLM入门教程> PDF推荐!

今天给大家推荐一本由吴恩达和OpenAI团队共同编写的关于大型语言模型&#xff08;LLM&#xff09;的权威教程<面向开发者的LLM入门教程>&#xff01;&#xff0c;在Github上已经高达50k star了&#xff0c;这含金量不用多说&#xff0c;在这里给大家强烈推荐一波&#xf…

Wappalyzer指纹识别下载安装使用教程,图文教程(超详细)

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

Spring Security初探

url说明方法/login/oauth/authorize无登录态时跳转到/authentication/require&#xff0c;有登录态时跳转到/loginorg.springframework.security.oauth2.provider.endpoint.AuthorizationEndpoint#authorize/authentication/require自己写的用于重定向到登录页面的urlcn.merryy…

【笔记】常用USB转串口芯片CH340驱动自动静默安装方法

微信关注公众号 “DLGG创客DIY” 设为“星标”&#xff0c;重磅干货&#xff0c;第一时间送达。 前言 CH340是沁恒(南京沁恒微电子股份有限公司)一款非常有名USB转串口芯片&#xff0c;很多廉价的开发板上都使用这款USB转串口芯片&#xff0c;我觉得主要原因是因为它成本最低&a…

SSM【Spring SpringMVC Mybatis】——Mybatis

目录 1、初识Mybatis 1.1Mybatis简介 1.2 官网地址 2、搭建Mybatis框架 2.1 准备 2.2 搭建Mybatis框架步骤 1. 导入jar包 2. 编写核心配置文件【mybatis-config.xml】 3. 书写相关接口及映射文件 4. 测试【SqlSession】 2.3 添加Log4j日志框架 导入jar包 编写配置文…

Nginx配置/.well-known/pki-validation/

当你需要在Nginx上配置.well-known/pki-validation/时&#xff0c;这通常是为了支持SSL证书的自动续订或其他验证目的。以下是配置步骤&#xff1a; 创建目录结构&#xff1a; 在你的网站根目录下创建一个名为.well-known的目录&#xff08;SSL证书申请之如何创建/.well-known/…

重启酱酒老品牌茅泉酒,肆拾玖坊打造“第二增长曲线”

执笔 | 尼 奥 编辑 | 扬 灵 在肆拾玖坊9周年纪念日前夕&#xff0c;来自业内外的精英朋友相聚茅台镇&#xff0c;见证肆拾玖坊“第二增长曲线”——茅泉酒的焕新出发。正如肆拾玖坊创始人、CEO张传宗所言&#xff1a;“这是重要的里程碑&#xff0c;也是小小的开始。” 从…

【excel】数据非数值导致排序失效

场景 存在待排序列的数值列&#xff0c;但排序失效&#xff0c;提示类型有问题&#xff1a; 解决 选中该列&#xff0c;数据→分列 而后发现提示消失&#xff0c;识别为数字&#xff0c;可正常排序。

cypress的安装使用

cypress npm install -g cnpm --registryhttps://registry.npm.taobao.org

力扣41. 缺失的第一个正数

Problem: 41. 缺失的第一个正数 文章目录 题目描述思路复杂度Code 题目描述 思路 1.将nums看作为一个哈希表&#xff0c;每次我们将数字n移动到nums[n - 1]的位置(例如数字1应该存在nums[0]处…),则在实际的代码操作中应该判断nums[i]与nums[nums[i] - 1]是否相等&#xff0c;若…

直播报名 | 珈和科技携手潍柴雷沃共探“现代农场”未来式

数据赋农季系列直播第四期&#xff0c;我们将以“未来农业发展趋势之农场智慧化、管理数据化”为主题展开&#xff0c;此次系列直播由珈和科技及湖北珞珈实验室共同主办&#xff0c;第四期直播很荣幸邀请到潍柴雷沃参与其中&#xff0c;双方将就智慧农服平台和数据交易SaaS平台…