一、概述
在平時的業(yè)務(wù)場景中,經(jīng)常有一些場景需要使用定時任務(wù),比如:
- 時間驅(qū)動的場景:某個時間點發(fā)送優(yōu)惠券,發(fā)送短信等等。
- 批量處理數(shù)據(jù):批量統(tǒng)計上個月的賬單,統(tǒng)計上個月銷售數(shù)據(jù)等等。
- 固定頻率的場景:每隔5分鐘需要執(zhí)行一次。
在Java中,傳統(tǒng)的定時任務(wù)實現(xiàn)方案,比如Timer,Quartz等都或多或少存在一些問題:
- 不支持集群、不支持統(tǒng)計、沒有管理平臺、沒有失敗報警、沒有監(jiān)控等等
而且在現(xiàn)在分布式的架構(gòu)中,有一些場景需要分布式任務(wù)調(diào)度:
- 同一個服務(wù)多個實例的任務(wù)存在互斥時,需要統(tǒng)一的調(diào)度。
- 任務(wù)調(diào)度需要支持高可用、監(jiān)控、故障告警。
- 需要統(tǒng)一管理和追蹤各個服務(wù)節(jié)點任務(wù)調(diào)度的結(jié)果,需要記錄保存任務(wù)屬性信息等。
顯然傳統(tǒng)的定時任務(wù)已經(jīng)不滿足現(xiàn)在的分布式架構(gòu),所以需要一個分布式任務(wù)調(diào)度平臺,目前比較主流的是elasticjob和xxl-job。
二、安裝
采用的是docker 進行安裝
1、拉取鏡像
ocker pull xuxueli/xxl-job-admin:2.3.0
2、創(chuàng)建數(shù)據(jù)庫
從官網(wǎng)拉取tables_xxl_job.sql
數(shù)據(jù)庫表格丟到自己的mysql上去數(shù)據(jù)庫地址
3、創(chuàng)建容器并運行
配置-e PARAMS
的參數(shù)可以參照 官網(wǎng) ,和在spring的.properties文件配置類似
- 如需自定義 mysql 等配置,可通過 “-e PARAMS” 指定,參數(shù)格式 PARAMS=“–key=value --key2=value2” ;
- 配置項參考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
- 如需自定義 JVM內(nèi)存參數(shù) 等配置,可通過 “-e JAVA_OPTS” 指定,參數(shù)格式 JAVA_OPTS=“-Xmx512m” ;
//配置mysql參數(shù)
docker run -e PARAMS="--server.port=9051 --spring.datasource.url=jdbc:mysql://192.168.0.146:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 --spring.datasource.username=root --spring.datasource.password=123456" -p 9051:9051 -v /tmp:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:2.3.0
!注意
- mysql如果是也是部署在docker上的,不要寫成localhost或者127.0.0.1了,要寫ip
- username和password需要是你數(shù)據(jù)庫的地址
- xxl_job 是從官網(wǎng)拉取的數(shù)據(jù)庫,如果名字有改動也需要對應(yīng)上
- 且配置的中間不要有換行等空格符合
3、查看容器和日志
C:\Users>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
2227fc303594 xuxueli/xxl-job-admin:2.3.0 "sh -c 'java -jar $J…" 17 minutes ago Up 17 minutes 0.0.0.0:9051->9051/tcp
xxl-job-admin
7f6c94285299 consul "docker-entrypoint.s…" 2 months ago Exited (255) 2 months ago 8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8500->8500/tcp
mysql8.0
740eb45a513d redis "docker-entrypoint.s…" 9 months ago Exited (0) 2 days ago
myredis
查看啟動日志是否有問題,最終success
C:\Users>docker logs -t -f --tail 10f xxl-job-admin
2023-08-04T08:49:28.302253800Z
2023-08-04T08:49:28.302441500Z . ____ _ __ _ _
2023-08-04T08:49:28.302461700Z /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
2023-08-04T08:49:28.302484200Z ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2023-08-04T08:49:28.302499100Z \\/ ___)| |_)| | | | | || (_| | ) ) ) )
2023-08-04T08:49:28.302512600Z ' |____| .__|_| |_|_| |_\__, | / / / /
2023-08-04T08:49:28.302526000Z =========|_|==============|___/=/_/_/_/
2023-08-04T08:49:28.306031900Z :: Spring Boot :: (v2.4.2)
2023-08-04T08:49:28.306065400Z
2023-08-04T08:49:28.438761800Z 16:49:28.434 logback [main] INFO c.x.job.admin.XxlJobAdminApplication - Starting XxlJobAdminApplication using Java 1.8.0_265 on 2227fc303594 with PID 7 (/app.jar started by root in /)
2023-08-04T08:49:28.440836200Z 16:49:28.440 logback [main] INFO c.x.job.admin.XxlJobAdminApplication - No active profile set, falling back to default profiles: default
2023-08-04T08:49:31.210036000Z 16:49:31.209 logback [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9051 (http)
2023-08-04T08:49:31.226888300Z 16:49:31.226 logback [main] INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9051"]
2023-08-04T08:49:31.228067500Z 16:49:31.227 logback [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
2023-08-04T08:49:31.228668800Z 16:49:31.228 logback [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.41]
2023-08-04T08:49:31.302073600Z 16:49:31.301 logback [main] INFO o.a.c.c.C.[.[.[/xxl-job-admin] - Initializing Spring embedded WebApplicationContext
2023-08-04T08:49:31.302455100Z 16:49:31.302 logback [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2408 ms
2023-08-04T08:49:32.422937800Z 16:49:32.422 logback [main] INFO c.x.j.a.c.scheduler.XxlJobScheduler - >>>>>>>>> init xxl-job admin success.
2023-08-04T08:49:32.464778700Z 16:49:32.462 logback [xxl-job, admin JobRegistryMonitorHelper-registryMonitorThread] INFO com.zaxxer.hikari.HikariDataSource - HikariCP - Starting...
2023-08-04T08:49:32.712904100Z 16:49:32.712 logback [main] INFO o.s.s.c.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
2023-08-04T08:49:32.931666500Z 16:49:32.931 logback [main] INFO o.s.b.a.w.s.WelcomePageHandlerMapping - Adding welcome page template: index
2023-08-04T08:49:33.198892600Z 16:49:33.198 logback [xxl-job, admin JobRegistryMonitorHelper-registryMonitorThread] INFO com.zaxxer.hikari.HikariDataSource - HikariCP - Start completed.
2023-08-04T08:49:33.854065100Z 16:49:33.853 logback [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 2 endpoint(s) beneath base path '/actuator'
2023-08-04T08:49:33.916699800Z 16:49:33.916 logback [main] INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9051"]
2023-08-04T08:49:33.949473300Z 16:49:33.948 logback [main] INFO o.a.c.c.C.[.[.[/xxl-job-admin] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-08-04T08:49:33.949971100Z 16:49:33.949 logback [main] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
2023-08-04T08:49:33.953091200Z 16:49:33.952 logback [main] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms
2023-08-04T08:49:33.956208900Z 16:49:33.955 logback [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9051 (http) with context path '/xxl-job-admin'
2023-08-04T08:49:33.987836700Z 16:49:33.986 logback [main] INFO c.x.job.admin.XxlJobAdminApplication - Started XxlJobAdminApplication in 6.262 seconds (JVM running for 7.286)
2023-08-04T08:49:37.002114700Z 16:49:37.001 logback [xxl-job, admin JobScheduleHelper#scheduleThread] INFO c.x.j.a.c.thread.JobScheduleHelper - >>>>>>>>> init xxl-job admin scheduler success.
4、打開網(wǎng)頁 127.0.0.1:9051/xxl-job-admin/
默認賬號/密碼 :admin/123456文章來源:http://www.zghlxwxcb.cn/news/detail-625265.html
三、實現(xiàn)注冊測試
1、創(chuàng)建一個SpringBoot項目、添加依賴。
- 名字隨意
添加依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency><!-- 官網(wǎng)的demo是2.2.1,中央maven倉庫還沒有,所以就用2.2.0 -->
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2、添加配置
2.1、添加yml
server:
port: 8080
spring:
application:
name: xxl-test01
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mycinema?serverTimezone=Asia/Shanghai
username: root
password: 123456
xxl:
job:
admin:
### 調(diào)度中心部署根地址 [選填]:如調(diào)度中心集群部署存在多個地址則用逗號分隔。執(zhí)行器將會使用該地址進行"執(zhí)行器心跳注冊"和"任務(wù)結(jié)果回調(diào)";為空則關(guān)閉自動注冊;
addresses: http://localhost:9051/xxl-job-admin
executor:
### 執(zhí)行器AppName [選填]:執(zhí)行器心跳注冊分組依據(jù);為空則關(guān)閉自動注冊
appname: xxl-test01
### 執(zhí)行器IP [選填]:默認為空表示自動獲取IP,多網(wǎng)卡時可手動設(shè)置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用于 "執(zhí)行器注冊" 和 "調(diào)度中心請求并觸發(fā)任務(wù)";
ip: 192.168.0.146
### 執(zhí)行器端口號 [選填]:小于等于0則自動獲取;默認端口為9999,單機部署多個執(zhí)行器時,注意要配置不同執(zhí)行器端口;
port: 3333
### 執(zhí)行器運行日志文件存儲磁盤路徑 [選填] :需要對該路徑擁有讀寫權(quán)限;為空則使用默認路徑;
logPath: logs/jeecg/job/jobhandler/
logRetentionDays: 30
2.2、添加配置類,用于配置bean
/**
* @author zhengfuping
* @version 1.0
* @description: TODO 執(zhí)行配置,注入到bean容器
*/
@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;
}
}
2.3、添加執(zhí)行定時Handler
/**
* @author zhengfuping
* @version 1.0
* @description: TODO 具體執(zhí)行測試demo
*/
@Component
@Slf4j
public class XxlJobDemoHandler {
/**
* Bean模式,一個方法為一個任務(wù)
*/
@XxlJob("demoJobHandler")
public ReturnT<String> demoJobHandler(String param) throws Exception {
log.info("java, Hello World~~~");
log.info("獲取參數(shù):",param);
log.info("----xxl執(zhí)行成功-----");
return ReturnT.SUCCESS;
}
}
3、配置客戶端
-
配置執(zhí)行器,
appname
需要和yml 的一致 -
配置任務(wù)
-
配置完成之后需要自己手動啟動,可以查看執(zhí)行日志或者手動執(zhí)行
4、結(jié)果日志輸出
文章來源地址http://www.zghlxwxcb.cn/news/detail-625265.html
到了這里,關(guān)于【2023】XXL-Job 具體通過docker 配置安裝容器,再通過springboot執(zhí)行注冊實現(xiàn)完整流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!