• springboot集成xxl-job详解


    springboot集成xxl-job详解
    1、springboot集成xxl-job:
    (1)pom文件里引入xxl-job依赖
    
    <dependency>
        <groupId>com.xuxueligroupId>
        <artifactId>xxl-job-coreartifactId>
        <version>2.4.0version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    (2)application.properties配置文件:
    # xxl-job
    xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
    
    ### xxl-job, access token
    xxl.job.accessToken=default_token
    
    ### xxl-job executor appname
    xxl.job.executor.appname=xj-store
    ### 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=9999
    ### 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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    (3)在你的项目里新建文件结构如下:
    |
    |______BizApplication.java		# 启动类
    |______biz
    |_______|____controller
    |_______|____job
    |_______|______|____config
    |_______|______|________|____XxlJobConfig.java
    |_______|______|____handle
    |_______|______|________|____DevUserHandler.java
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    XxlJobConfig.java文件内容如下:
    package com.unicom.mark.job.config;
    
    import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
    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;
    
    /**
     * xxl-job config
     *
     * @author xuxueli 2017-04-28
     */
    @Configuration
    public class XxlJobConfig {
        private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
    
        @Value("${xxl.job.admin.addresses}")
        private String adminAddresses;
    
        @Value("${xxl.job.accessToken}")
        private String accessToken;
    
        @Value("${xxl.job.executor.appname}")
        private String appname;
    
        @Value("${xxl.job.executor.address}")
        private String address;
    
        @Value("${xxl.job.executor.ip}")
        private String ip;
    
        @Value("${xxl.job.executor.port}")
        private int port;
    
        @Value("${xxl.job.executor.logpath}")
        private String logPath;
    
        @Value("${xxl.job.executor.logretentiondays}")
        private int logRetentionDays;
    
    
        @Bean
        public XxlJobSpringExecutor xxlJobExecutor() {
            logger.info(">>>>>>>>>>> xxl-job config init.");
            XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
            xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
            xxlJobSpringExecutor.setAppname(appname);
            xxlJobSpringExecutor.setAddress(address);
            xxlJobSpringExecutor.setIp(ip);
            xxlJobSpringExecutor.setPort(port);
            xxlJobSpringExecutor.setAccessToken(accessToken);
            xxlJobSpringExecutor.setLogPath(logPath);
            xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
    
            return xxlJobSpringExecutor;
        }
    
        /**
         * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
         *
         *      1、引入依赖:
         *          
         *             org.springframework.cloud
         *             spring-cloud-commons
         *             ${version}
         *         
         *
         *      2、配置文件,或者容器启动变量
         *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
         *
         *      3、获取IP
         *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
         */
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    DevUserHandler.java文件内容如下:
    package com.unicom.mark.job.handler;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.unicom.framework.utils.StringUtils;
    import com.unicom.mark.dao.mapper.CertificationUserMapper;
    import com.unicom.mark.dao.mapper.DevUserMapper;
    import com.unicom.mark.dao.mapper.EntUserMapper;
    import com.unicom.mark.utils.Constants;
    import com.unicom.mark.vo.DevUserVo;
    import com.unicom.mark.vo.EntUserVo;
    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.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.Resource;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    
    /**
     * XxlJob开发示例(Bean模式)
     *
     * 开发步骤:
     * 1、在Spring Bean实例中,开发Job方法,方式格式要求为 "public ReturnT execute(String param)"
     * 2、为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
     * 3、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
     *
     * @author xuxueli 2019-12-11 21:52:51
     */
    @Component
    public class DevUserHandler {
        private static Logger logger = LoggerFactory.getLogger(DevUserHandler.class);
    
        @Resource
        private CertificationUserMapper certificationUserMapper;
    
        @Resource
        private DevUserMapper devUserMapper;
    
        @Resource
        private EntUserMapper entUserMapper;
    
        /**
         * 1、简单任务示例
         */
        @XxlJob("demoJobHandler")
        public  ReturnT<String> demoJobHandler(String param) throws Exception {
            XxlJobHelper.log("XXL-JOB, Hello World.");
            JSONObject jsonObject = JSON.parseObject(param);
            System.out.println(param);
            for (int i = 0; i < 5; i++) {
                XxlJobHelper.log("beat at:" + i);
                System.out.printf("beat at:%d \n", i);
                TimeUnit.SECONDS.sleep(2);
            }
            // default success
            return ReturnT.SUCCESS;
        }
    
        /**
         * 2、同步开发方账号
         */
        @XxlJob("syncDevUser")
        public ReturnT<String> syncDevUser() throws Exception {
            List<DevUserVo> userList = certificationUserMapper.getDeveloperUser();
            if (userList.size()!=0) {
                List<String> idList = new ArrayList<>();
                for (DevUserVo userVo : userList) {
                    // 处理devname字段为空的情况
                    if(StringUtils.isBlank( userVo.getEntNameCn() )){
                        userVo.setEntNameCn("开发者");
                    }
                    int i = devUserMapper.insertUser(userVo, Constants.ENT_PASSWORD, Constants.DEV_ROLE);
                    if (i == 1) {
                        idList.add(String.valueOf(userVo.getId()));
                    }
                }
                String ids = String.join(",", idList);
                certificationUserMapper.updateDevelopPass(ids);
            }
            return ReturnT.SUCCESS;
        }
    
      
    
    
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    (4)登录xxl-job-admin新建执行器和新建任务:

    新建执行器:
    在这里插入图片描述
    新建任务:
    在这里插入图片描述
    在这里插入图片描述

    (5)打印结果:

    在这里插入图片描述

  • 相关阅读:
    更快更强更稳定:腾讯向量数据库测评
    零知识证明笔记——私密交易,pederson,区间证明,所有权证明
    区服分析丨更透彻的游戏营运数据解读,助力高效增长
    连接服务器失败是什么原因
    基础复习——为activity补充活动信息——利用资源文件配置字符串——利用元数据传递配置信息——给页面注册快捷方式...
    OpenHarmony编译系统
    【南京大学操作系统(蒋炎岩)】(五) 并发 Bug 和应对
    Rancher 全球化部署最佳实践
    leetcode:1974. 使用特殊打字机键入单词的最少时间(python3解法)
    2023江西师范大学计算机考研信息汇总
  • 原文地址:https://blog.csdn.net/qq_33867131/article/details/134436229