编辑:业余草

推荐:https://www.xttblog.com/?p=5097

最近有网友咨询我 xxl-job 相关的问题,我认为官方文档已经写的非常详细了,这里我再给大家写一个入门级的 3 分钟实战 demo,希望能够帮助到更多的“新手用户”。首先我们需要先下载 xxl-job 的源码,下载地址: github:https://github.com/xuxueli/xxl-job。我这里下载使用的是 2.1.2 版本,下载完成后解压,然后使用 IDEA 的Import Project 导入到 IDE 中,注意使用 Maven 方式导入。

将上图目录下的 sql 文件放入 mysql 中执行,执行完成之后会生成如下 8 张表。

然后我们需要修改 xxl-job-admin 工程下的 application.properties 配置文件。

主要修改的就是数据库连接属性,需要跟上面创建数据库表的数据库连接信息一致。

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

配置文件修改完毕之后,因为是一个 SpringBoot 项目,不需要再打成 war 包放入 tomcat 这种操作了,就可以直接启动 xxl-job-admin 的启动类。

成功启动之后,如果没有修改 application.properties 配置文件中的端口号和路径的话,直接打开 http://localhost:8080/xxl-job-admin 就能看到 xxl-job-admin 的监控平台了,默认用户名 admin,密码 123456。

到这里 xxl-job-admin 就搭建完成了,接下来我们写一个 demo,demo 中的代码均参考自官方网站 https://www.xuxueli.com/xxl-job/,有兴趣的同学可以自行查阅 项目结构如下:

首先导入 pom 依赖。

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

同样的需要修改配置文件 application.properties。

# web port
server.port=8081# log config
logging.config=classpath:logback.xml### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30

添加 logback.xml。

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds"><contextName>logback</contextName><property name="log.path" value="/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log"/><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern></rollingPolicy><encoder><pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="console"/><appender-ref ref="file"/></root>
</configuration>

config 类。

@Configuration
public class XxlJobConfig {private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.executor.appname}")private String appName;@Value("${xxl.job.executor.ip}")private String ip;@Value("${xxl.job.executor.port}")private int port;@Value("${xxl.job.accessToken}")private String accessToken;@Value("${xxl.job.executor.logpath}")private String logPath;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {logger.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppName(appName);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}
}

最后是需要定时执行的任务逻辑,在 2.1.2 版本中,由原来基于 JobHandler 类任务开发方式,优化为支持基于方法的任务开发方式;因此,可以支持单个类中开发多个任务方法,进行类复用。

@Component
public class DemoXxxlJob {@XxlJob("demoJobHandler")public ReturnT<String> demoJobHandler(String param) throws Exception {XxlJobLogger.log("XXL-JOB, Hello World.");for (int i = 0; i < 5; i++) {XxlJobLogger.log("beat at:" + i);TimeUnit.SECONDS.sleep(2);}return ReturnT.SUCCESS;}
}

上面的代码使用的是简单任务示例(Bean 模式),还支持分片广播任务、命令行任务、跨平台 Http 任务、生命周期任务,任务初始化与销毁时,支持自定义相关逻辑;可根据自己的需要选择,在源码中的 xxl-job-executor-sample-springboot 都有相应的示例可供参考。一切准备就绪之后,我们就可以在 xxl-job-admin 上建立执行器了。

新增任务。

选择你的操作。

执行完成后可查看调度日志。

日志详情。

到这里整个项目就搭建完成了,整个 demo 非常简单。很多人就是因为没用过 xxl-job,所以非常惧怕,等你认真翻一遍官网,动手再实践一遍,最终发现 xxl-job 是如此的简单!

咱们下篇见
每天进步一点点
慢一点才能更快推荐阅读

良月柒:有哪些适合放在程序员办公桌上的高逼格物件?​zhuanlan.zhihu.com

1k左右的预算,有没有不错的机械键盘推荐?​www.zhihu.com

kettle使用命令行的方式执行多个job_手把手教你实现xxl-job分布式任务调度平台搭建相关推荐

  1. 如何使用 kubectl 通过命令行的方式操作 SAP Kyma

    Kyma 运行时就是 Kubernetes cluster. To manage resources and configurations from the command line, the too ...

  2. windows server 2008 R2 命令行的方式创建用户、设置密码

    一.使用命令行的方式创建用户.设置密码 (1)标准格式: net user username password  / add 例如:建立一个名为lijunxuan.密码为Abc_123的用户 net ...

  3. 以命令行的方式运行activity

    以命令行的方式运行activity,可以直接运行你想要运行的那个activity,不必从第一个activity开始 1. <activity android:name=".camera ...

  4. java test abc_DOS命令行下成功执行命令:java Test abc 21,则以下描述正确的是()

    [单选题]假设有两个整数x和y,表达式x>=y?x:y的含义是() [单选题]下列哪项不是Java语言的关键字?() [判断题]每项经济业务发生后,都会引起企业的资产和权益总额发生增减变动,但会 ...

  5. java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri 引言 HelloGitHub 推出的<讲解开源项目>[1]系列. 项目地址: https://githu ...

  6. kettle用命令行执行ktr和kjb

    Spoon 是一个图形用户界面,它允许你运行转换或者任务,其中转换是用Pan 工具来运行,任务是用Kitchen 来运行.Pan 是一个数据转换引擎,它可以执行很多功能,例如:从不同的数据源读取.操作 ...

  7. 用命令行的方式来执行7z压缩和解压缩

    我在研究怎样使用7z,以及7z的极限压缩(把文件压缩到最小size). 7z官网是 http://www.7-zip.org/ 从官网下载软件安装包.安装完毕后,安装目录里面有一个 7-zip.chm ...

  8. Linux之scp命令的介绍以及命令行输入密码参数执行方法和常见问题解决

    一.scp命令 scp命令主要用于Linux中不同主机间复制文件和目录. scp是Linux系统下基于ssh登录进行安全的远程文件拷贝命令. scp是加密的 二.scp使用方法 2.1.命令格式 sc ...

  9. linux命令行执行mysql语句_linux命令行中直接执行mysql语句

    其实我一开始是拒绝的,但是貌似就得这么做.怎么一行一行的来?没法整了. 有两种方法可以在命令行下执行sql命令.第一种是使用"-e"参数来指定需要执行的sql语句:第二种是通过管道 ...

最新文章

  1. 设置腾讯云linux服务器中 MySQL 允许远程访问
  2. oracle object_type,Oracle TYPE OBJECT详解 | 学步园
  3. 如何理解java中String的不可变性
  4. Android 线程 thread 两种实现方法!
  5. 利用Java实现串口全双工通讯
  6. python系统自学_如何系统地自学python
  7. Windows 10环境下如何安装CMake?(更新时间:2021.9.13)
  8. 如何判断单链表是否存在环
  9. 前端基础学习之Html标签
  10. Learn Python the hard way, ex40 字典,可爱的字典
  11. My New Game2
  12. 数据中台之数据集成平台的数据抽取
  13. 安装Windows刷机adb环境手册
  14. R语言书籍学习02 《R语言数据分析、挖掘建模与可视化》-第一章 R语言必备基础知识
  15. 关于AFNetworking上传图片问题
  16. 袋鼠云数据中台专栏(一) :浅析数据中台策略与建设实践
  17. linux gns3使用教程,《GNS3实战指南》——2.4 在Ubuntu Linux上安装
  18. NXP JN5169 读写片外 FLASH
  19. 计算机管理邮箱,用WindowsLiveMail一次管理多个邮箱
  20. linux yum报错:Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile

热门文章

  1. 【搜索】【广搜模板】
  2. OpenCV2简单的特征匹配
  3. 为何主程序退出了,创建的多线程还在运行呢?
  4. 书写高效的、可维护的、组件化的CSS(zz)
  5. APACHE局域网配置域名访问
  6. ssh: connect to host 192.168.121.128 port 22: No route to host
  7. 禁用浏览器cache,是浏览器上的回退按钮失效。
  8. 【Hive】字符串函数
  9. 安装fastDFS的依赖包fdfs_client报错解决方法
  10. Linux-删除文件空间不释放问题解决