xxl-job(三)带参数执行和高可用部署

一、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;
    }
}

xxl-job(三)带参数执行和高可用部署_第1张图片

后台:

xxl-job(三)带参数执行和高可用部署_第2张图片

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

xxl-job(三)带参数执行和高可用部署_第3张图片

后台:

二、多节点部署: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;

xxl-job(三)带参数执行和高可用部署_第4张图片

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 &

启动后访问:

xxl-job(三)带参数执行和高可用部署_第5张图片

 

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

xxl-job(三)带参数执行和高可用部署_第6张图片

并修改jobOne的执行策略为轮询:

xxl-job(三)带参数执行和高可用部署_第7张图片

1)job自动执行一段时间,观察下数据库,可以看到同一个任务不会被多次执行:

xxl-job(三)带参数执行和高可用部署_第8张图片

2)手动执行一次,也不会被多次执行:

 

3)这时候把141的job节点停掉:

xxl-job(三)带参数执行和高可用部署_第9张图片

可以看到都是localhost节点在执行。

三、高可用部署:上面已经验证了job客户端支持多节点部署,下面将admin服务端也部署多节点,实现高可用:

 

你可能感兴趣的:(SpringBoot+定时器)