下载xxljob
xxljob源码仓库地址
添加maven依赖
<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ --> <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>${最新稳定版本}</version> </dependency>
环境
- Maven3+
- Jdk1.8+
- Mysql5.7+
开始部署xxljob
- 执行sql文件 初始化数据库
- 修改配置文件 文件路径 /xxl-job/xxl-job-admin/src/main/resources/application.properties 修改端口等等,如下:
- 然后启动xxl-job-admin中的main 或者打包后用jar执行都可,这里选用执行main,执行成功后如下:
- 启动完成后,访问http://localhost:8080/xxl-job-admin,默认登录账号 “admin/123456”, 登录后运行界面如下图所示:
这样调度中心就算部署成功了。
开始创建执行器
其实这个springboot项目 原xxl-job-master 里就已经集成了 我这里单独再重新创建 配置可以参考原 xxl-job-exector-sample-springboot项目
-
新建springboot项目
- 引入 xxl-job-core 依赖 我这里采用2.3.0版本
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
- 编写配置文件
SimpleXxlJob(定时作业业务逻辑类)
package com.example.demo.jobhandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
/**
* @Title: SimpleXxlJob
* @Package com.example.demo.jobhandler
* @Description: TODO
* @Author: yangy
* @Date: 2022/10/11 10:28
**/
@Component
public class SimpleXxlJob {
/**
* 1、简单任务示例(Bean模式)
*/
@XxlJob("printJobHandler")
public void printJobHandler() throws Exception {
System.out.println("每1分钟执行一次!");
}
}
XxlJobConfig(执行器配置类)
package com.example.demo.jobhandler;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* xxl-job config
*
* @author xuxueli 2017-04-28
*/
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.appname}")
private String appname;
@Value("${xxl.job.executor.address}")
private String address;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
/**
* 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
*
* 1、引入依赖:
* <dependency>
* <groupId>org.springframework.cloud</groupId>
* <artifactId>spring-cloud-commons</artifactId>
* <version>${version}</version>
* </dependency>
*
* 2、配置文件,或者容器启动变量
* spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
*
* 3、获取IP
* String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
*/
}
然后启动main 如下:这样执行器就算启动成功了
配置定时作业
添加执行器
- 在执行器管理页面新增刚才启动的执行器就可以了,注册方式选自动,appName就是application.properties里配置的xxl.job.executort.appname
添加定制作业
- 运行模式选择BEAN JobHandler和业务代码里一致
- 添加完成后 就可以启动并执行了,点击执行一次后,该作业就会立即执行一次:
- 点击查询日志 可以查看该作业执行的历史记录
注意事项
关于传参的问题,在定时任务的创建和执行一次调用的时候都会有任务参数的填写,这就是我们需要传递到代码中的参数。
关于接收参数的问题,在2.3.0版本及其以上的参数接收发生了改变,用以下方式进行接收参数,且只能传递String类型,如果是其它类型参数,需要自己在代码中进行对应的转换
参数获取如下:
String param = XxlJobHelper.getJobParam(); // 接收参数代码
修改业务代码后,打印传递的参数:
总结
xxl-job是一个轻量级的分布式调度框架,拆箱即用,并且对接简单,并且支持多种执行策略,同时也支持shell和Python等脚本执行,后续可以慢慢研究。