XXL-JOB通用执行器的编写

xxl-job提供的JobHandler例子中, 执行器都是与web应用整合在一起, 其实执行器完全可以分离出来单独启动, 更容易了解执行器的原理

执行器的核心代码

首先进行JobHandler的注册

1
XxlJobExecutor.registJobHandler("demoJobHandler", new DemoJobHandler());

随后即可启动执行器, 这里为了简单, 配置写死了, 后面可以引入配置文件更加灵活

1
2
3
4
5
6
7
8
9
XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
xxlJobExecutor.setAdminAddresses("http://127.0.0.1:8080/xxl-job-admin");
xxlJobExecutor.setAppName("test");
xxlJobExecutor.setIp("");
xxlJobExecutor.setPort(9997);
xxlJobExecutor.setAccessToken("t");
xxlJobExecutor.setLogPath("/data/applogs/xxl-job/jobhandler");
xxlJobExecutor.setLogRetentionDays(-1);
xxlJobExecutor.start();

由于xxlJobExecutor.start()是新开一个线程来开启执行器, 所以若是普通Java应用启动则需加上这个, 防止主进程结束, 导致程序关闭, Web应用则不需要了

1
2
3
while(true){
Thread.sleep(3000);
}

Maven依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
<dependencies>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.0.1</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
</dependencies>

再配置logback.xml即可

首先启动调度中心也就是xxl-job-admin项目, 再启动项目, 就可以在http://127.0.0.1:8080/xxl-job-admin中看到执行器了

JobHandler

JobHandler只需继承IJobHandlerexecute中实现自己的逻辑即可,@JobHandler(value="demoJobHandler")注解只是为了方便通过扫描自动注册, 如果是像上面那样简单的实现, 其实不需要这个

1
2
3
4
5
6
7
8
public class DemoJobHandler extends IJobHandler {

@Override
public ReturnT<String> execute(String param) throws Exception {
XxlJobLogger.log("Hello World");
return SUCCESS;
}
}

至此, 完整的xxl-job执行器就完成了