XXL-JOB是一个分布式任务调度平台,它可以很方便的实现分布式的任务调度。

部署

首先我们下载XXL-JOB的源码

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

之后我们根据doc/db/tables_xxl_job.sql中的sql创建对应的数据库和表。

在启动XXL-JOB之前,有些配置需要修改:

  1. xxl-job-admin/src/main/resources/logback.xml中property的value需要设置为xxl-job/xxl-job-admin/data/applogs/xxl-job/xxl-job-admin.log,否则可能会因为文件夹不存在而启动不了
  2. xxl-job-admin/src/main/resources/application.properties中数据库的地址、用户名和密码,以及accessToken等等需要修改为自定义的配置值

修改完配置,就可以启动服务了

mvn clean package
cd xxl-job-admin/target
java -jar xxl-job-admin-3.1.2-SNAPSHOT.jar

这样服务就启动成功了,之后我们可以访问http://127.0.0.1:8080/xxl-job-admin/进入控制台

服务搭建

我们基于SpringBoot来构建业务服务,首先我们添加依赖

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

之后创建一个XXL-JOB的配置bean

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Configuration
public class XxlJobConfig {
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
// XXL-JOB地址
xxlJobSpringExecutor.setAdminAddresses("http://127.0.0.1:8080/xxl-job-admin");
// 当前这个XXL-JOB的名称
xxlJobSpringExecutor.setAppname("test");
// 密钥,和之前的配置需要一致
xxlJobSpringExecutor.setAccessToken("1sg");
// 设置端口,不设置会自动选择
// xxlJobSpringExecutor.setPort(9999);
// 设置日志目录和保存策略
xxlJobSpringExecutor.setLogPath("./log");
xxlJobSpringExecutor.setLogRetentionDays(30);
return xxlJobSpringExecutor;
}
}

配置好了之后我们就可以新建一个任务了

1
2
3
4
5
6
7
8
9
10
@Component
public class DemoJob {

private static final Logger logger = LoggerFactory.getLogger(DemoJob.class);

@XxlJob("demoJobHandler")
public void demoJobHandler() {
logger.info("XXL-JOB 任务开始执行: {}", new Date());
}
}

添加了配置和任务之后,我们就可以启动服务了。

使用

在控制台中,我们选择执行器管理,之后新增一个执行器。其中,AppName就是上面配置的应用名,如上就是test,名称就是这个管理器的自定义名称,注册方式选择自动注册即可。

创建好执行器,我们就可以新增任务了。在任务管理中,我们新增一个执行器为刚刚新增那个执行器的任务。运行模式选择BEAN,JobHandler设置为@XxlJob注解中的值demoJobHandler。之后当任务执行的条件达到时,demoJobHandler方法就会执行了。

参考

XXL开源社区
XXL-JOB 安装及使用教程