5.3 修改默认的配置信息
5.4 启动服务程序
5.5 访问调度中心控制台
🏠 http://127.0.0.1:9401/xxl-job-admin/
6.搭建XXL-JOB —— 执行器
下边配置执行器,执行器负责与调度中心通信接收调度中心发起的任务调度请求。
这里为了方便演示,我们创一个新的空maven项目充当执行器进行演示:
6.1 pom.xml核心配置
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.3.1</version> </dependency>
6.2 application.yaml核心配置
server: # 指定服务端口 port: 10001 xxl: job: admin: # 调度中心的部署地址。若调度中心采用集群部署,存在多个地址,则用逗号分隔。执行器将会使用该地址进行”执行器心跳注册”和”任务结果回调”。 addresses: http://localhost:9401/xxl-job-admin executor: # 执行器的应用名称,它是执行器心跳注册的分组依据。 appname: demo-process-service address: # 执行器的IP地址,用于”调度中心请求并触发任务”和”执行器注册”。执行器IP默认为空,表示自动获取IP。多网卡时可手动设置指定IP,手动设置IP时将会绑定Host。 ip: # 执行器的端口号,默认值为9999。单机部署多个执行器时,注意要配置不同的执行器端口。调度中心需要从执行器拉取日志,指定调度中心访问本执行器的端口。 port: 60000 # 执行器输出的日志文件的存储路径,需要拥有该路径的读写权限。 logpath: /data/applogs/xxl-job/jobhandler # 执行器日志文件的定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保存3天,否则功能不生效。这里指定为30天。 logretentiondays: 30 # 执行器的通信令牌,非空时启用。 accessToken: default_token
注意配置中的appname这是执行器的应用名,稍后在调度中心配置执行器时要使用。
6.3 XxlJobConfig配置类
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(); */ }
6.4 XxlJobDemoApplication启动类
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author 狐狸半面添 * @create 2023-02-17 17:19 */ @SpringBootApplication public class XxlJobDemoApplication { public static void main(String[] args) { SpringApplication.run(XxlJobDemoApplication.class); } }
6.5 进入调度中心添加执行器
先启动调度中心服务和执行器服务。
AppName
:需要从application.yaml中拿到名称
:可以自定义注册方式
:选择 自动注册
我们需要再刷新一下页面,就可以看到在线的执行器的机器地址:
7.搭建XXL-JOB —— 执行任务
先编写一个任务类:
import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; /** * XxlJob开发示例(Bean模式) * 开发步骤: * 1、任务开发:在Spring Bean实例中,开发Job方法; * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; * * @author 狐狸半面添 * @create 2023-02-17 17:41 */ @Component public class XxlJobDemo { }
7.1 简单任务示例(Bean模式)
7.1.1 编写任务方法
package com.xxl.demo.component; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; /** * XxlJob开发示例(Bean模式) * 开发步骤: * 1、任务开发:在Spring Bean实例中,开发Job方法; * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; * * @author 狐狸半面添 * @create 2023-02-17 17:41 */ @Component public class XxlJobDemo { /** * 简单任务示例(Bean模式) */ @XxlJob("demoJobHandler") public void demoJobHandler() throws Exception { // 打印日志 XxlJobHelper.log("简单任务示例方法执行"); System.out.println("=================================="); for (int i = 0; i < 5; i++) { System.out.println("第" + i + "次循环"); TimeUnit.MILLISECONDS.sleep(500); } // default success } }
7.1.2 在调度中心进行任务管理
记得先将服务重启。
调度类型选择Cron
,并配置Cron表达式设置定时策略。Cron表达式是一个字符串,通过它可以定义调度策略,格式如下:
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
xxl-job提供图形界面去配置:
📝 一些例子如下:
- 30 10 1 * * ? 每天1点10分30秒触发
- 0/30 * * * * ? 每30秒触发一次
- 0 0/10 * * * ? 每10分钟触发一次
运行模式有BEAN
和GLUE
,bean模式较常用就是在项目工程中编写执行器的任务代码,GLUE是将任务代码编写在调度中心。
JobHandler
任务方法名填写@XxlJob
注解中的名称。
新增成功,就启动任务:
查看Java控制台:
查看日志:
任务跑一段时间注意清理日志:
如果要停止任务需要在调度中心操作: