以前使用的是azakan服務調度,但是其比較笨重,且爲何不方便。。。
故改爲xxl-job執行任務調度。。
xxl的調度只需要添加配置項:
添加maven配置
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core-beta</artifactId>
<version>1.9.2</version>
</dependency>
package com.trs.idap.config;
import com.xxl.job.core.executor.XxlJobExecutor;
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.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.trs.idap.service.jobhandler")
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobExecutor xxlJobExecutor() {
logger.info("<<-----------------初始化分佈式調度服務----------------->>");
XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
xxlJobExecutor.setAdminAddresses(adminAddresses);
xxlJobExecutor.setAppName(appName);
xxlJobExecutor.setIp(ip);
xxlJobExecutor.setPort(port);
xxlJobExecutor.setAccessToken(accessToken);
xxlJobExecutor.setLogPath(logPath);
xxlJobExecutor.setLogRetentionDays(-1);
return xxlJobExecutor;
}
}
配置文件爲:
xxl:
job:
admin:
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
addresses: http://localhost:8080/xxl-job-admin
### xxl-job executor address
executor:
appname: ca-service-executor
ip:
port: 9999
### xxl-job log path
logpath: /data/applogs/jobService/jobhandler
### xxl-job log retention days
logretentiondays: -1
### xxl-job, access token
accessToken:
注意配置的addresses:是xxl-job服務端的地址。
executor是執行器要執行的參數。。
appname命名要與服務端註冊的時候一致;
port:一定是未使用的port,即運行xxl的任務時需要用到該port。。。其他的沒多大的意義了。。
看一下。。。部署在tomcat中的xxl-job-admin。。默認使用的時tomcat的8080端口。。
默認的用戶名和密碼直接進入了。。這是我配置好的頁面。。。
1,首先要配置執行器管理。。。
此時AppName就是我們在代碼中生命的名稱,不能變。。。。
名稱是便於自己理解的,見名知意就好。
排序,順序1,2,3就好。。。隨便寫
註冊方式,選擇自動註冊就好。
自動註冊時機器名稱可以不寫。。保存。。。
2,此時要維護任務管理
任務管理中,選擇你剛添加的執行器,此時任務列表是,空的。。因爲你沒有添加任務。。。
此時我們先回到代碼中,因爲代碼中,我們只是配置了xxl-job管理,並沒有寫真正的任務。。。
此時一定要在config中配置的@ComponentScan(basePackages = "com.trs.idap.service.jobhandler")包下,才能被scan到。。
package com.trs.idap.service.jobhandler;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import org.springframework.stereotype.Component;
/**
* @創建人:Young
* @時 間: 2019/4/13
* @描 述: TODO
*/
@JobHandler(value = "test")
@Component
public class TestService extends IJobHandler {
@Override
public ReturnT<String> execute(String s) {
try {
System.out.println("獲取到的參數是:"+s);
System.out.println("//todo 我執行test任務了。。。。");
return ReturnT.SUCCESS;
}catch (Exception e){
System.out.println(e.getMessage());
return ReturnT.FAIL;
}
}
}
此時的任務名稱是jobHandler是test。。
回到xxl-job-admin,的任務管理中,選擇執行器,然後選擇新增任務。
任務描述:自己對任務的描述;
cron:是執行任務的cron時間表達式;
Jobhandler:是在我們代碼中定義的jobHandler。
任務參數可選:就是傳遞到代碼中param的一部分。
點擊保存。
啓動項目後,你會發現註冊成功的日誌。。
執行器中也發現了,註冊成功ip和端口號。
此時可以手動點擊執行,或者等到配置的cron時間到時執行。。
控制檯日誌:
將傳入的參數整理爲json即是:
頁面的執行狀態:
此時一組調用就成功。。。
其他要寫的業務就在java代碼中寫。。。
//todo