XXL-JOB

官方文档地址

https://www.xuxueli.com/xxl-job/

自己根据官方文档配置部署好调度中心和执行器项目

路由策略: 轮询演示

前提:一个调度中心,两个执行器项目
第一个执行器项目application.properties配置(每一个执行器是一个单独的springboot项目)
# web port 应用的端口
server.port=8082
# no web
#spring.main.web-environment=false
# log config
logging.config=classpath:logback.xml
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
# 调度中心地址
xxl.job.admin.addresses=http://127.0.0.1:8088/xxl-job-admin
#xxl.job.admin.addresses=http://190.168.1.40:8088/xxl-job-admin
### xxl-job, access token
xxl.job.accessToken=default_token
### 执行器的Appname
xxl.job.executor.appname=xxljob-clearfolder
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### 执行器ip(可自动或手动录入)
xxl.job.executor.ip=
# 执行器内部端口 rpc 内部调用端口
xxl.job.executor.port=8182
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
第二个执行器项目application.properties配置
# web port
server.port=8083
# no web
#spring.main.web-environment=false
# log config
logging.config=classpath:logback.xml
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8088/xxl-job-admin
#xxl.job.admin.addresses=http://190.168.1.40:8088/xxl-job-admin
### xxl-job, access token
xxl.job.accessToken=default_token
### xxl-job executor appname
#xxl.job.executor.appname=xxl-job-executor-sample
xxl.job.executor.appname=xxljob-clearfolder
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=8183
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
重点在于各自的server.port和xxl.job.executor.port保持不同,xxl.job.executor.appname保持一致。
在调度中心新增执行器后可查看结果

在这里插入图片描述

任务管理新增任务,选择轮询模式

在这里插入图片描述

在两个执行器项目分别定义pollingTask
/**
 * @Description:
 * @Author: k23
 * @Date: 2022-10-08 15:30
 * @Version: 1.0
 */
@Component
public class MyJobHandler {
    
    
    @XxlJob("pollingTask")
    public ReturnT pollingTask(){
    
    
        System.out.println("演示调度策略轮询执行器");
        return ReturnT.SUCCESS;
    }
}
执行后查看输出顺序
第一个、最后一个、随机的路由策略同理

父子任务 (只需在对应的地方填上子任务id即可)

在这里插入图片描述

动态参数任务(web端传递文件路径,服务端删除指定文件路径小案例)

@Component
public class MyJobHandler {
    
    
    static int flag = 1;//用来判断文件是否删除成功
    @XxlJob("ClearFolder")//清空文件夹任务
    public void ClearFolder() throws Exception {
    
    
        String param = XxlJobHelper.getJobParam(); // 获取参数
        String[] methodParams = param.split(",");
        if (methodParams.length ==1){
    
    
            XxlJobHelper.handleFail("参数不能为空");
            return;
        }
        //删除一个文件夹下的所有文件(包括子目录内的文件)
        //File file = new File("E:\\testkk");
        String path = methodParams[0];
        File file = new File(path);
        //判断文件为null或文件目录存在
        if (!file.exists()){
    
    
            flag = 0;
            XxlJobHelper.handleFail("文件删除失败,文件夹不存在");
            return;
        }
        File[] listFiles = file.listFiles();
        if (listFiles.length ==0){
    
    
            flag = 0;
            XxlJobHelper.handleFail("文件删除失败,文件夹为空");
            return;
        }
        deleteFile(file);
        if (flag == 1){
    
    
            XxlJobHelper.handleSuccess("文件删除成功");
            return;
        }
    }

    public static void deleteFile(File file){
    
    
        //取得这个目录下的所有子文件对象
        File[] files = file.listFiles();
        //遍历该目录下的文件对象
        for (File f: files){
    
    
            //打印文件名
            String name = f.getName();
            System.out.println(name);
            Date d=new Date(f.lastModified());
            DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
            String format = df.format(d);
            System.out.println(format);
            //判断子目录是否存在子目录,如果是文件则删除
            if (f.isDirectory()){
    
    
                deleteFile(f);
            }else {
    
    
                f.delete();
            }
        }
        //删除空文件夹  for循环已经把上一层节点的目录清空。
       // file.delete();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42436236/article/details/127948305