【含完整代码】Java定时任务之xxl-job[超详细]
前言
个人博客:www.wdcdbd.com
在Java中使用定时任务是一件很常见的事情,比如使用定时任务在什么时间,什么时候,去发布一些信息,或者去查询一些日志等相关的代码。这时,我们就要开发定时任务这中功能来实现此案例。而Java常见的定时任务一般有6种,JDK自带Timer实现,Quartz框架集成实现,spring自带的Spring Task等 剩下的就不说了,具体想要了解可以去百度搜索,而今天要讲的是Java定时任务神器: xxl-Job——轻量级分布式任务调度平台。
XXl-Job
开源xxl-job: https://gitee.com/xuxueli0323/xxl-job
XXL-JOB是一个轻量级分布式任务调度平台。特点是平台化,易部署,开发迅速、学习简单、轻量级、易扩展。由调度中心和执行器功能完成定时任务的执行。调度中心负责统一调度,执行器负责接收调度并执行。
因为此文章是针对小白来讲述的,所以会使用大量的图片和代码,以便讲的更加详细,易懂,所以会有很多小废话。话不多说,直接上代码讲解。
一、Gitee下载开源框架XXl-job
1、拉取xxl-job代码
首先去上述的gitee拉取开源的xxl-job代码,千万不要选择master分支,要选择稳定的版本,这里我选择2.2.0来做演示。
去自己的idea中拉取gitee
拉取好之后,就是下述图片的样式,其中最主要的内容就是admin,等到最后,我会单独讲解xxl-job框架中所有的相关内容都是什么意思。现在先按照步骤做即可
二、在使用xxl-job时所以要了解的知识(重要)
1、所要了解的知识
xxl-job共分为3大部分:任务调度器平台、任务执行器、任务处理器(jobHandler)、
任务调度器平台: 就是上述拉取下来的代码中的xxl-job-admin项目,这个项目就是任务调度平台。我们只需要配置一下就可以有自己的一个平台环境。而这个人任务调度器平台我们就可以理解为eureka(注册中心)
任务执行器:执行任务处理器
任务处理器(jobHandler):通过自己在项目中自定义不同的任务处理器来让任务执行器执行,并通过调度器平台 处理不同的任务。
现在看不懂没事,等后续搭建起来之后,你就会全部理解。
三、搭建任务调度器平台
1、任务调度器平台
1.1、创建xxl-job-admin数据库
将这个.sql文件创建到你的数据库中,这个应该都会创建,数据库名字要为xxl_job防止不必要的错误。其实里边已经帮你写好了,这里我就以Navicat为例引入.sql文件
将.sql复制粘贴到桌面,然后通过Navicat引入即可。
1.2、配置yaml
首先去xxl-job-admin找到配置文件,并修改port、mysql、mail、xxl.job.accessToken
修改port
修改mysql
修改mail
邮箱的账号密码不知道的去百度搜索:java配置mail
修改 xxl.job.accessToken
这个accessToken可以理解为秘钥,后面会在你自己的项目中配置和他名字一模一样的秘钥,让你的项目与任务调度器平台互相关联起来。
这里我就不做修改了,使用默认的,可以自定义。
1.3、配置logback.xml
路径可以自定义,我就放到我习惯的位置,你也可以放到你自己习惯的位置
在linux中先创建好自己的路径日志,然后赋权限,下面的命令,是给文件赋权限的
chmod -R 777 /home/dblog/xxl-job/xxl-job-admin.log
1.4、启动任务调度器
配置好之后,用idea打包,并将jar在linux中运行。
1.4.1、修改jar名称
我将xxl-job-admin-2.4.1-SNAPSHOT放到自己习惯的位置并修改了名称(个人习惯),不修改也可以。
#将jar通过后台进程启动,并将启动信息指向xxl-job-admin.log中
nohup java -jar xxl-job-admin.jar > xxl-job-admin.log 2>&1 &
#查看日志
tail -f xxl-job-admin.log
1.5、访问任务调度器
访问地址:http://自己的ip:自己设置的端口号/xxl-job-admin
账号:admin ;密码:123456
好的!以上就是搭建好的xxl-job的调度器平台了,现在我们只需要在自己的项目中引入xxl-job依赖,然后配置一些东西,就可以在这个任务调度器平台来操作定时任务啦!!!
四、sprintboot引入xxl-job
1、引入xxl-job-core依赖
在自己的项目中引入xxl-job-core依赖;只需引入这一个依赖就行
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.1</version>
</dependency>
2、配置yaml
在自己的项目中配置yaml
xxl:
job:
admin:
# 调度中心服务部署的地址
addresses: http://192.168.139.110:9000/xxl-job-admin
# 执行器通讯TOKEN,要和调度中心服务部署配置的accessToken一致,要不然无法连接注册
accessToken: default_token
executor:
# 执行器AppName
appname: job-demo
# 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
address:
ip: 192.168.139.110
#执行器端口号:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
port: 9999
# 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
logpath: /home/dblog/log/jobhandler
# 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
logretentiondays: 30
注意!!!!: logpath执行日志存储位置,也是需要自己在linux中创建的,和上述任务调度器平台创建一样,创建完成之后,设置权限。
3、配置日志
去你拉取的xxl-job项目中找到 logback.xml,复制到你自己项目的位置
复制到自己的项目中
3.1、修改日志路径
在linux创建,并且给权限,这个就偷下懒不写了,在任务调度平台中已经写过了,可以模仿写一下。
4、编写配置类
原封不动复制粘贴到你项目的位置就行即可,我一般习惯放到config下。这个配置类其实是可以在xxl-job项目中找到的。
@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();
*/
}
xxl-job项目中的XxlJobConfig
上述的配置类代码,其实就是这个xxl-job项目中的XxlJobConfig 一模一样。
5、创建任务处理器类
将xxl-job中的SampleXxlJob复制到自己的项目中
5.1、修改并编写代码
全部配置好之后,将自己的项目打包并部署到linux中,可以看到我的项目已经起来了。
接下来,就要去操作任务调度器平台了,来设置定时任务。
五、操作任务调度器平台(任务调度中心)
1、新增执行器
注意:自动注册,xxl-job会自动找到你的机器地址。
也就是你上述在自己项目中配置的执行器ip和端口号,如果你的机器地址为无,那么就手动注册。
2、新增任务处理器
JobHandler来源
自己项目代码中自定义的名称。
3、启动任务处理器
启动完成之后,你可以去linux,查看你刚才打印的信息,如果出现则代表成功。
还可以看调度日志
好啦!!以上就是xxl-job的使用啦,哇,深夜2点爆肝的,呜呜呜。希望各位看完之后,能够快速提升自己的实力吧。加油!
附加-运行模式:
BEAN模式
Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法。
优点:每个任务只需要一个方法,添加@XxlJob注解即可,方便、快速。
缺点:需要Spring环境
GLUE模式(Java)
GLUE模式(Java)
任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。开发流程如下:
步骤一:调度中心,新建调度任务:
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 “GLUE模式(Java)”;
步骤二:开发任务代码:
选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发(也可以在IDE中开发完成后,复制粘贴到编辑中)。
其他模式:略
更多推荐
所有评论(0)