日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

开源调度框架xxl-job集成SpringBatch详解

發(fā)布時間:2025/1/21 javascript 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开源调度框架xxl-job集成SpringBatch详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

      • 一、啟動xxl-job調(diào)度中心
      • 二、配置部署執(zhí)行器項目
        • 1、maven依賴
        • 2、執(zhí)行器配置
        • 3、執(zhí)行器組件配置
        • 4、springbatch調(diào)度任務(wù)開發(fā)
        • 5、調(diào)度中心,新建執(zhí)行器
        • 6、調(diào)度中心,新建調(diào)度任務(wù)

寫在前面:
我是「境里婆娑」。我還是從前那個少年,沒有一絲絲改變,時間只不過是考驗,種在心中信念絲毫未減,眼前這個少年,還是最初那張臉,面前再多艱險不退卻。
寫博客的目的就是分享給大家一起學(xué)習(xí)交流,如果您對 Java感興趣,可以關(guān)注我,我們一起學(xué)習(xí)。

前言:springbatch它對任務(wù)調(diào)度方面沒有做出什么封裝,如何把任務(wù)的執(zhí)行時間實現(xiàn)cron表達式的可配置化, 修改的時候并不需要修改配置文件, 重啟工程等等麻煩的事情, 網(wǎng)上查找各種資料知道 xxl-job 及當當網(wǎng)開源的elastic-job,這里我就介紹xxl-job與spring batch的集成使用。

一、啟動xxl-job調(diào)度中心

如何啟動xxl-job調(diào)度中心,其官方文檔已經(jīng)寫的很詳細,在這里就不在重復(fù)介紹了。

啟動xxl-job調(diào)用中心傳送門:啟動調(diào)度中心詳細步驟

根據(jù)官網(wǎng)調(diào)度中心啟動完成界面如下:

二、配置部署執(zhí)行器項目

執(zhí)行器項目:spring-boot-springbatch (提供多種版本執(zhí)行器供選擇,現(xiàn)以 springboot 版本為例,可直接使用,也可以參考其并將現(xiàn)有項目改造成執(zhí)行器)
作用:負責(zé)接收“調(diào)度中心”的調(diào)度并執(zhí)行;可直接部署執(zhí)行器,也可以將執(zhí)行器集成到現(xiàn)有業(yè)務(wù)項目中。

1、maven依賴

spring-boot-springbatch pom文件中引入“ xxl-job-core”的maven依賴;

<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.2.0</version></dependency>

2、執(zhí)行器配置

執(zhí)行器配置,配置內(nèi)容說明:

### 調(diào)度中心部署跟地址 [選填]:如調(diào)度中心集群部署存在多個地址則用逗號分隔。執(zhí)行器將會使用該地址進行"執(zhí)行器心跳注冊"和"任務(wù)結(jié)果回調(diào)";為空則關(guān)閉自動注冊; xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin ### 執(zhí)行器通訊TOKEN [選填]:非空時啟用; xxl.job.accessToken= ### 執(zhí)行器AppName [選填]:執(zhí)行器心跳注冊分組依據(jù);為空則關(guān)閉自動注冊 xxl.job.executor.appname=spring-boot-springbatch ### 執(zhí)行器注冊 [選填]:優(yōu)先使用該配置作為注冊地址,為空時使用內(nèi)嵌服務(wù) ”IP:PORT“ 作為注冊地址。從而更靈活的支持容器類型執(zhí)行器動態(tài)IP和動態(tài)映射端口問題。 xxl.job.executor.address= ### 執(zhí)行器IP [選填]:默認為空表示自動獲取IP,多網(wǎng)卡時可手動設(shè)置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用于 "執(zhí)行器注冊" 和 "調(diào)度中心請求并觸發(fā)任務(wù)"; xxl.job.executor.ip= ### 執(zhí)行器端口號 [選填]:小于等于0則自動獲取;默認端口為9999,單機部署多個執(zhí)行器時,注意要配置不同執(zhí)行器端口; xxl.job.executor.port=9999 ### 執(zhí)行器運行日志文件存儲磁盤路徑 [選填] :需要對該路徑擁有讀寫權(quán)限;為空則使用默認路徑; xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler ### 執(zhí)行器日志文件保存天數(shù) [選填] : 過期日志自動清理, 限制值大于等于3時生效; 否則, 如-1, 關(guān)閉自動清理功能; xxl.job.executor.logretentiondays=30

3、執(zhí)行器組件配置

執(zhí)行器組件XxlJobConfig配置如下:

@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;@Beanpublic 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;} }

4、springbatch調(diào)度任務(wù)開發(fā)

基于BEAN模式(方法形式)
Bean模式任務(wù),支持基于方法的開發(fā)方式,每個任務(wù)對應(yīng)一個方法。

JobLauncherService配置如下

/*** @author shuliangzhao* @date 2020/12/12 19:17*/ @Service public class JobLauncherService {private static final Logger log = LoggerFactory.getLogger(JobLauncherService.class);@Autowiredprivate JobLauncher jobLauncher;public Map<String,Object> startJob(Job job, JobParameters jobParameters) throws Exception {Map<String,Object> resultMap = CollUtil.newHashMap();//計時StopWatch stopWatch = new StopWatch();stopWatch.start(job.getName());//執(zhí)行任務(wù)JobExecution run = jobLauncher.run(job, jobParameters);//返回結(jié)果StringBuffer stringBuffer = new StringBuffer();Collection<StepExecution> stepExecutions = run.getStepExecutions();stepExecutions.forEach(stepExecution -> {stringBuffer.append("readCount:" + stepExecution.getCommitCount() + LogConstants.LOG_STR_COMMA);stringBuffer.append("filterCount:" + stepExecution.getFilterCount() + LogConstants.LOG_STR_COMMA);stringBuffer.append("commitCount:" + stepExecution.getCommitCount() + LogConstants.LOG_STR_COMMA);stringBuffer.append("writeCount:" + stepExecution.getWriteCount());});stopWatch.stop();ExitStatus exitStatus = run.getExitStatus();String returnStr = System.lineSeparator() +"resultCount: "+ stringBuffer.toString()+ System.lineSeparator() +"exitStatus: "+exitStatus+ System.lineSeparator()+ "timeInfo: "+stopWatch.prettyPrint();log.info(returnStr);resultMap.put(SyncConstants.STR_RETURN_RESULT,returnStr);resultMap.put(SyncConstants.STR_RETURN_EXITSTATUS,exitStatus);return resultMap;} }

啟動job工具類配置:

/*** @author shuliangzhao* @date 2020/12/12 19:24*/ public class JobUtil {/*** 構(gòu)建JobParameters* @return*/private static JobParameters makeJobParameters() {JobParameters jobParameters = new JobParametersBuilder().addLong("time",System.currentTimeMillis()).toJobParameters();return jobParameters;}public static ReturnT<String> runJob4Executor(String jobName, JobLauncherService jobLauncherService, Job job) throws Exception {XxlJobLogger.log("start sync "+jobName +" data");Map<String, Object> resultMap = jobLauncherService.startJob(job, makeJobParameters());String resultStr = (String)resultMap.get(SyncConstants.STR_RETURN_RESULT);XxlJobLogger.log("end sync "+jobName +" data, result: "+System.lineSeparator()+resultStr);ExitStatus exitStatus = (ExitStatus)resultMap.get(SyncConstants.STR_RETURN_EXITSTATUS);String exitCode = exitStatus.getExitCode();//若成功,返回SUCCESSif(ExitStatus.COMPLETED.getExitCode().equals(exitCode)){return IJobHandler.SUCCESS;}else{return IJobHandler.FAIL;}} }

執(zhí)行器開發(fā)PatternMatchJobHandler

1、任務(wù)開發(fā):在Spring Bean實例中,開發(fā)Job方法;
2、注解配置:為Job方法添加注解 “@XxlJob(value=“自定義jobhandler名稱”, init = “JobHandler初始化方法”, destroy = “JobHandler銷毀方法”)”,注解value值對應(yīng)的是調(diào)度中心新建任務(wù)的JobHandler屬性的值。
3、執(zhí)行日志:需要通過 “XxlJobHelper.log” 打印執(zhí)行日志;
4、任務(wù)結(jié)果:默認任務(wù)結(jié)果為 “成功” 狀態(tài),不需要主動設(shè)置;如有訴求,比如設(shè)置任務(wù)結(jié)果為失敗,可以通過 “XxlJobHelper.handleFail/handleSuccess” 自主設(shè)置任務(wù)結(jié)果;

/*** @author shuliangzhao* @date 2020/12/12 19:31*/ @Component public class PatternMatchJobHandler {@Autowiredprivate JobLauncherService jobLauncherService;@XxlJob(value="patternMatchJobHandler")public ReturnT<String> execute(String s) throws Exception {return JobUtil.runJob4Executor("patternMatchJob",jobLauncherService,SpringContextUtil.getBean("patternMatchJob", Job.class));} }

5、調(diào)度中心,新建執(zhí)行器

6、調(diào)度中心,新建調(diào)度任務(wù)

對新建的任務(wù)進行參數(shù)配置,運行模式選擇“ BEAN模式”,JobHandler屬性填充任務(wù)注釋解“ @XxlJob ”中定義的值

點擊任務(wù)管理執(zhí)行按鈕執(zhí)行一次,就可以把SpringBatch任務(wù)調(diào)起來。在調(diào)度日志里面可以查看接口是否執(zhí)行成功或失敗。

調(diào)度日志:

至此,我們開源調(diào)度框架xxl-job集成springbatch介紹完畢。
如果想更詳細查看以上所有代碼請移步到github:開源調(diào)度框架xxl-job集成springbatch

總結(jié)

以上是生活随笔為你收集整理的开源调度框架xxl-job集成SpringBatch详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。