@[TOC](SpringBoot集成分布式任务调度xxl-job)
# 1.下载源码
链接: [https://github.com/xuxueli/xxl-job](https://github.com/xuxueli/xxl-job)
将整个项目clone下来,两种方式,git和https,然后将clone下来的项目导入到idea。
![项目结构](https://img-blog.csdnimg.cn/20190125173046154.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkyOTIwNw==,size_16,color_FFFFFF,t_70)
# 2. 编译源码及启动调度中心
1.调度数据库初始化SQL脚本:
doc目录下**/xxl-job/doc/db/tables_xxl_job.sql **
在本地数据库直接跑即可,正常情况下生成16张表;
2. 改变调度中心xxl-job-admin下application.properties配置,数据库配置必须为跑sql脚本的数据库。
调度中心支持集群部署,集群情况下各节点务必连接同一个mysql实例;
如果mysql做主从,调度中心集群节点务必强制走主库;
3.若端口和其他服务冲突可以选择修改端口
```java
### web
server.port=8089
server.context-path=/xxl-job-admin
```
4. 修改logback.xml,将value值改为存在的文件
```java
<property name="log.path" value="/Users/lan/Desktop/java/log/xxl-job/xxl-job.log"/>
```
6.因为调度中心已经支持springboot,可以直接通过springboot内置容器启动
# 3. 执行器配置
1. xxl-job-executor-samples定义了多个执行器实例,也可以在自有的项目集成执行器配置,首先引入任务调度执行组件:
```java
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.0.1</version>
</dependency>
```
3. 我自身项目有springboot搭建 ,因此首先在yml中进行如下配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190125180157504.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkyOTIwNw==,size_16,color_FFFFFF,t_70)
3.配置任务执行器
```java
/**
*@Target 永无bug
*@Description
*@Author dd
*@Date 2019/1/25 15:35
**/
@Configuration
@ComponentScan(basePackages = "com.xfn.running.filter.jobhandler")
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;
@Bean(initMethod = "start", destroyMethod = "destroy")
public 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;
}
}
```
4. 任务定义
```java
/**
*@Target 永无bug
*@Description
*@Author dd
*@Date 2019/1/25 15:41
**/
@JobHandler(value="demoJobHandler")
@Component
public class DemoJobHandler extends IJobHandler{
@Override
public ReturnT<String> execute(String param) throws Exception {
for (int i = 0; i < 5; i++) {
TimeUnit.SECONDS.sleep(2);
System.out.println("hahahhahahahahahahahahha");
}
return SUCCESS;
}
}
```
5.注意点:
config定义的属性在配置文件中必须配置,appname必须指定为自身项目名称
启动项目 http://localhost:8089/xxl-job-admin
# 4.效果展示
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190125181051576.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkyOTIwNw==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190125181643299.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkyOTIwNw==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190125181746286.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkyOTIwNw==,size_16,color_FFFFFF,t_70)
## 总结
第一次写博客,多包涵,共勉。
附上许兄的文档地址 http://www.xuxueli.com/xxl-job/#/