一、job获取参数:xxl-job通过以下方式获取参数:
String param = XxlJobHelper.getJobParam();
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 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 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 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文件加上打包命令:
jar
org.springframework.boot
spring-boot-maven-plugin
repackage
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、测试:
编辑执行器,机器地址改为141和我本地的机器191
并修改jobOne的执行策略为轮询:
1)job自动执行一段时间,观察下数据库,可以看到同一个任务不会被多次执行:
2)手动执行一次,也不会被多次执行:
3)这时候把141的job节点停掉:
可以看到都是localhost节点在执行。
三、高可用部署:上面已经验证了job客户端支持多节点部署,下面将admin服务端也部署多节点,实现高可用: