说到定时任务想必每一个开发人员都不陌生,开启定时任务的方式也多种多样,如: @Scheduled,Quertz,Elastic-Job, xxl-job等。
xxl-job作为目前业界流行的分布式任务调度框架,受到越来越多的人的信任,越来越多的公司也接入了xxl-job作为定时任务统一调度中心。
想了解xxl-job的可以去github等平台学习。
在这里只介绍下项目中如何使用xxl-job,如何在任务管理界面配置定时任务。
xxl-job包依赖,maven引入
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.0.2</version>
</dependency>
代码集成,实现com.xxl.job.core.handler.IJobHandler重写execute(String s)方法制定执行规则。
/**
* 任务BeanHandler
* @author test
*/
@JobHandler(value="beanJobHandler")
@Component
@Slf4j
public class BeanJobHandler extends IJobHandler implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public ReturnT<String> execute(String param) throws Exception {
log.info("执行任务:{}", param);
if(StringUtils.isEmpty(param)){
return new ReturnT<>(ReturnT.FAIL_CODE, "参数不能为空");
}
String[] params = StringUtils.split(param, "#");
if(params == null || params.length< 2){
return new ReturnT<>(ReturnT.FAIL_CODE, "参数格式不正确,形如:com.test.job.BeanJobHandler#execute");
}
String beanClazzName = StringUtils.trimAllWhitespace(params[0]);
String methodName = StringUtils.trimAllWhitespace(params[1]);
Class taskBeanClazz = null;
try {
taskBeanClazz = Class.forName(beanClazzName );
}catch (Exception e){
log.error("执行任务失败:{},原因:Class不存在", param);
return new ReturnT<>(ReturnT.FAIL_CODE, "类 " + beanClazzName + " 不存在");
}
Method taskExecMethod = null;
try {
taskExecMethod = taskBeanClazz.getMethod(methodName );
}catch (Exception e){
log.error("执行任务失败:{},原因:方法不存在", param);
return new ReturnT<>(ReturnT.FAIL_CODE, "类 " + beanClazzName + " 中不存在" + methodName + "方法");
}
Object object = null;
try {
object = applicationContext.getBean(taskBeanClazz);
}catch (Exception e){
log.error("执行任务失败:{},原因:Bean不存在", param);
return new ReturnT<>(ReturnT.FAIL_CODE, "不存在 " + beanClazzName + " 类型的Bean");
}
try {
taskExecMethod.invoke(object);
}catch (Exception e){
log.error("执行任务失败:{}", param, e);
return new ReturnT<>(ReturnT.FAIL_CODE, stackTraceAsString);
}
return new ReturnT<>(ReturnT.SUCCESS_CODE, "执行成功");
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
}
管理界面如何配置:
- 配置执行器,模块名,模块的ip地址等
- 新增任务,配置任务执行规则
新增执行器:
新增任务:
注意事项:
3. 执行器: 选择对应的执行器,不然找不到对应的类和方法
4. cron: 定时任务执行规则
5. JobHandler: @JobHandler(value=“beanJobHandler”) 和运行模式需要一致
以上就是java 模块配置xxl-job,这里比较简单,只记录了如何使用,如何配置,作为一个参考依据,具体的操作还需要大家亲自实践,有疑问可以在评论区留言,欢迎各位指正。