以前使用的是azakan服务调度,但是其比较笨重,且为何不方便。。。
故改为xxl-job执行任务调度。。
xxl的调度只需要添加配置项:
添加maven配置
com.xuxueli
xxl-job-core-beta
1.9.2
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 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