一、带参执行:

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节点在执行。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐