• SpringBoot集成XXL-JOB


    第一步:下载xxl-job工程代码:

    https://gitee.com/dongfangxuri/springboot

    下下来工程如下:

     admin--->>后天管理,用于配置xxl-job各项数据

    sample-springboot---->> 一个springboot集成xxl-job的demo 我们不用这个吗,用自己的

     core----------->> xxjob依赖的核心包,集成时候需要

    简单说:

    集成xxl-job需要两个节点:

    1:admiin:后台管理

    2:项目节点:用于集成xxljob

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    开始集成:

    a:下下来项目找到:xxjobxuxueli0323-xxl-job-masterxxl-jobdocdb

     新建数据库导入基表:

    打开xxl-job-admin:

    修改application.properties:

    新增时区属性,否则乱码,然后启动admin 

    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    

      

    访问:

    http://localhost:8080/xxl-job-admin 账户/密码:admin/123456

    登录后台:

     看到该页面即可

    然后集成xxl-job:

    自己项目引入xxl-job核心包:

    <!--xxjob-->
            <!-- https://mvnrepository.com/artifact/com.githup.liuyanggithup/xxl-job-core -->
            <dependency>
                <groupId>com.xuxueli</groupId>
                <artifactId>xxl-job-core</artifactId>
                <version>2.2.0-SNAPSHOT</version>  我这里是最新的2.0 这个根据自己情况看 与刚才下下来的core项目版本需要一致
            </dependency>

    首先在springboot项目中新增如下配置:

    ### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"  即刚才启动的admin的地址
    xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin    
    
    ### xxl-job executor address 执行器的名称 这个很重要
    xxl.job.executor.appname=demo 与后台管理配置执行器名称一致
    xxl.job.executor.ip=127.0.0.1  
    xxl.job.executor.port=9999  如果是集群 不同的节点需要有不同的端口 比如 一个9999 一个9998
    
    ### xxl-job, access token
    xxl.job.accessToken=
    
    ### xxl-job log path
    xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
    ### xxl-job log retention days
    xxl.job.executor.logretentiondays=30

    初始化xxl-job配置:

    package com.example.demo.util;
    
    import com.xxl.job.core.executor.XxlJobExecutor;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class XxlJobConfig {
        private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
    
        @Value("${xxl.job.admin.addresses}")
        private String adminAddresses;
    
        @Value("${xxl.job.executor.appname}")
        private String appName;
    
        @Value("${xxl.job.executor.ip}")
        private String ip;
    
        @Value("${xxl.job.executor.port}")
        private int port;
    
        @Value("${xxl.job.accessToken}")
        private String accessToken;
    
        @Value("${xxl.job.executor.logpath}")
        private String logPath;
    
        @Value("${xxl.job.executor.logretentiondays}")
        private int logRetentionDays;
    
    
        @Bean(initMethod = "start", destroyMethod = "destroy")
        public XxlJobExecutor xxlJobExecutor() {
            logger.info(">>>>>>>>>>> xxl-job config init.");
            System.out.println("初始化成功了。。。。。。。。。。");
            XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
            xxlJobExecutor.setAdminAddresses(adminAddresses);
            xxlJobExecutor.setAppName(appName);
            xxlJobExecutor.setIp(ip);
            xxlJobExecutor.setPort(port);
            xxlJobExecutor.setAccessToken(accessToken);
            xxlJobExecutor.setLogPath(logPath);
            xxlJobExecutor.setLogRetentionDays(logRetentionDays);
            return xxlJobExecutor;
        }
    }
    

     

    定时任务:

    package com.example.demo.schedule;
    
    import com.example.demo.util.MyUtil;
    import com.xxl.job.core.biz.model.ReturnT;
    import com.xxl.job.core.handler.IJobHandler;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyTask1 extends IJobHandler {
    
        @Override
        public ReturnT<String> execute(String s) throws Exception {
            System.out.println("this is " + MyUtil.port + " MyTask1");
            testHelloWord();
            return ReturnT.SUCCESS;
        }
    
        public void testHelloWord() {
            System.out.println("hello word " + MyUtil.port + " MyTask1");
        }
    }
    

       启动项目无报错,集成完毕。

    配置后台管理:

     1:新增执行器:

     appName要与配置文件配置的xxl.job.executor.appname一模一样 不然找不到(重点):

    自动注册会发现注册到admin的ip,我这里是集群两个节点,所以是两个(xxl.job.executor.port 需不同 )

    保存

    进入任务管理:

    新增任务:

    执行器即是刚才新建的执行器,选择一个即可,

    这里有两个重点:

    1:路由策略:第一个即集群环境下选择第一个节点执行,我们这里选择轮询,这次a,下次b

    2:运行模式:我们选择GLUE(JAVA):即继承:

    IJobHandler的这种实现方式:
    package com.example.demo.schedule;
    
    import com.example.demo.util.MyUtil;
    import com.xxl.job.core.biz.model.ReturnT;
    import com.xxl.job.core.handler.IJobHandler;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyTask1 extends IJobHandler {
    
        @Override
        public ReturnT<String> execute(String s) throws Exception {
            System.out.println("this is " + MyUtil.port + " MyTask1");
            testHelloWord();
            return ReturnT.SUCCESS;
        }
    
        public void testHelloWord() {
            System.out.println("hello word " + MyUtil.port + " MyTask1");
        }
    }

    最后,需包这段代码复制到:(重点)

    进入:

    原则上,这里代码与程序代码一模一样,否则执行会有差异,根据情况去定夺

    这样,我们即完成了springboot继承xxl-job的任务

    但是一般开发中不可能是单任务单节点,所以,我们看下多任务,集群部署的配置,大同小异:

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    我这里是两个定时任务:

     所以需要在admin配置两个:

     看我们执行器是一个地址列表:

    所以会根据路由模式,去轮询

    轮询结果:

     

     间隔2秒依次执行

    在调度日志查看调度情况:

    我这里配置如下:

  • 相关阅读:
    【转】iOS深入学习(Block全面分析)
    iOS—请求Web Service
    iOS设计模式——MVC
    iOS基础知识
    iOS学习——常用博客
    【转】使用segue页面间传递数据
    【转】storyboard之 prepareForSegue:sender:
    【转】NSDictionary和NSMutableDictionary用法详解
    配置.pch文件
    MKNetworkKit下载图片并显示在UIImageView上
  • 原文地址:https://www.cnblogs.com/coderdxj/p/12248446.html
Copyright © 2020-2023  润新知