一、带参执行:
1、获取参数:
job获取参数在不同版本略微有些区别,如2.3.0版本:
@XxlJob("TestOneHandler")
public ReturnT<String> jobDemo(String s) throws Exception {
String param = XxlJobHelper.getJobParam();
System.out.println("TestOneHandler执行参数:"+param);
return SUCCESS;
}
2.1.2版本:
@XxlJob(value = "myTestJob")
public ReturnT<String> jobHandler(String param) {
try {
jobHandleCommonService.handleData(param);
} catch (Exception e) {
LOGGER.error("myTestJoberror", e);
ReturnT<String> returnT = ReturnT.FAIL;
returnT.setMsg(e.getMessage());
return returnT;
}
return ReturnT.SUCCESS;
}
2、demo:
(1)单参数:
package com.job.client.jobhandle;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
import static com.xxl.job.core.biz.model.ReturnT.SUCCESS;
@Component
public class TestOneHandler {
@XxlJob("TestOneHandler")
public ReturnT<String> jobDemo(String s) throws Exception {
String param = XxlJobHelper.getJobParam();
System.out.println("TestOneHandler执行参数:"+param);
return SUCCESS;
}
}
后台:
(2)多参数:自定义分割方式
package com.job.client.jobhandle;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
import static com.xxl.job.core.biz.model.ReturnT.SUCCESS;
@Component
public class TestOneHandler {
@XxlJob("TestOneHandler")
public ReturnT<String> jobDemo(String s) throws Exception {
String param = XxlJobHelper.getJobParam();
String[] methodParams = param.split(",");
System.out.println("TestOneHandler执行参数1:"+methodParams[0]);
System.out.println("TestOneHandler执行参数2:"+methodParams[1]);
return SUCCESS;
}
}
后台:
二、多节点部署:
admin服务端只部署一个节点(xxx.xx.xxx.141),Job客户端部署两个节点(一个是xxx.xx.xxx.141,一个是我本地机器xxx.xx.xxx.191,两台机器在一个内网环境下)
代码改动:如我新增一张表,job1执行时往这张表塞入数据:
CREATE TABLE `t_record` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`msg` varchar(255) DEFAULT NULL,
`params` varchar(255) DEFAULT NULL,
`ip` varchar(255) DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
package com.job.client.jobhandle;
import com.job.client.dto.RecordDTO;
import com.job.client.service.RecordService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import static com.xxl.job.core.biz.model.ReturnT.SUCCESS;
@Component
public class TestOneHandler {
@Autowired
private RecordService recordService;
@XxlJob("TestOneHandler")
public ReturnT<String> jobDemo(String s) throws Exception {
String param = XxlJobHelper.getJobParam();
System.out.println("TestOneHandler执行参数:"+param);
RecordDTO record = new RecordDTO();
record.setIp("");
record.setParams(param);
recordService.insert(record);
return SUCCESS;
}
}
pom文件加上打包命令:
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
1、部署xxl-job-admin服务端:
在xxl-job-admin项目下执行mvn clean package打包,把生成的jar包上传到141服务器上并执行启动命令
java -jar xxl-job-admin-2.3.0.jar &
启动后访问:
2、job-client部署:把job中的ip改为141,并修改xxl.job.admin.addresses的值为http://xxx.xx.xxx.141:7777/xxl-job-admin。
在job-client项目下也执行mvn clean package把打包后的jar包上传到141上,执行java -jar job-client-1.0-SNAPSHOT.jar &启动。
3、本地节点启动:修改xxl.job.executor.port的值为5555(不修改保持9999也可以,这里用了不一样的端口测试配置);修改xxl.job.admin.addresses的值为http://xxx.xx.xxx.141:7777/xxl-job-admin。
并把job中的ip改为localhost。启动项目
4、测试:
编辑执行器,加入两个节点,如:
并修改jobOne的执行策略为轮询:
1)job自动执行一段时间,观察下数据库,可以看到同一个任务不会被多次执行:
2)手动执行一次,也不会被多次执行:
3)这时候把141的job节点停掉:
可以看到都是localhost节点在执行。