ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

调度任务xxl-job,定时器任务

2022-06-09 11:38:07  阅读:183  来源: 互联网

标签:定时器 String private job paramMap put public xxl


定时器任务的使用

1、配置信息

#xxl-job
xxl:
  job:
    admin:
      addresses: http://12.0.0.1:8080/xxl-job-admin
      username: admin
      password: admin
    executor:
      address:
      # 执行器名称
      appname: xxl-job-test-sync-job
      # 任务信息描述
      jobdesc: 定时任务
      ip: 
      port: 9999
      logpath: 
      logretentiondays: 30
    accessToken: 

 

/**
 * xxl-job config
 *
 * @author guan
 */
@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;
    @Value("${xxl.job.admin.username}")
    private String username;
    @Value("${xxl.job.admin.password}")
    private String password;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.jobdesc}")
    private String jobdesc;

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

    public static final String JOB_INFO_UPDATE = "/jobinfo/update"; // 任务更新
    public static final String JOB_INFO_LIST = "/jobinfo/pageList"; // 任务列表
    public static final String JOB_GROUP_LIST = "/jobgroup/pageList"; // 任务组列表
    public static final String JOB_LOGIN = "/login";  // 登录

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

2.调用xxl-job服务接口更新任务信息

    /**
     * 获取cookie
     *
     * @return
     */
    public String getCookie() {
        String path = adminAddresses + JOB_LOGIN;
        Map<String,Object> hashMap = new HashMap<>();
        hashMap.put("userName", username);
        hashMap.put("password", password);
        HttpResponse response = HttpRequest.post(path).form(hashMap).execute();
        List<HttpCookie> cookies = response.getCookies();
        StringBuilder builder = new StringBuilder();
        for (HttpCookie cookie : cookies) {
            builder.append(cookie.toString());
        }
        return String.valueOf(builder);
    }
    /**
     * 获取jogGroup的id
     *
     * @param jobgroupPath
     * @return
     * @throws Exception
     */
    public int getJobGroupId(String jobgroupPath){
        Map<String, Object> jobgroupParamMap = new HashMap<>();
        //获取jobGroup的Id
        jobgroupParamMap.put("appname", appname);
        HttpResponse jobgroupResponse = HttpRequest.post(adminAddresses + jobgroupPath).form(jobgroupParamMap).execute();
        // 拿到数据进行转换
        Map<String, Object> stringObjectMap = JSON.parseObject(jobgroupResponse.body(), new TypeReference<Map<String, Object>>() {});
        List<XxlJobGroup> xxlJobGroupList = JSON.parseArray(String.valueOf(stringObjectMap.get("data")),XxlJobGroup.class);
        return xxlJobGroupList.get(0).getId();
    }
/**
     * 更新定时器
     * @param duplicationStrategyVo
     * @return
     */
    public int updateJob() {
        int jobId = 0;
        getCookie();//获取cookie
        // 获取任务详情
        XxlJobInfo xxlJobInfo = getXxlJobInfo(jobdesc);try {
            String path = adminAddresses + JOB_INFO_UPDATE;
            Map<String, Object> paramMap = new HashMap<>();
            paramMap.put("id", xxlJobInfo.getId());
            paramMap.put("jobGroup", getJobGroupId(JOB_GROUP_LIST));
            paramMap.put("jobDesc", xxlJobInfo.getJobDesc());
            paramMap.put("executorRouteStrategy", xxlJobInfo.getExecutorRouteStrategy());// 路由策略
            paramMap.put("glueType", xxlJobInfo.getGlueType());
            paramMap.put("executorHandler", xxlJobInfo.getExecutorHandler()); // 此处hander需提前在项目中定义
            paramMap.put("executorBlockStrategy", xxlJobInfo.getExecutorBlockStrategy());
            paramMap.put("executorTimeout", xxlJobInfo.getExecutorTimeout());
            paramMap.put("executorFailRetryCount", xxlJobInfo.getExecutorFailRetryCount());//执行失败重试
            paramMap.put("author", xxlJobInfo.getAuthor());
            paramMap.put("scheduleType", xxlJobInfo.getScheduleType());
            paramMap.put("scheduleConf", xxlJobInfo.getScheduleConf());
            paramMap.put("glueRemark", xxlJobInfo.getGlueRemark());
            paramMap.put("triggerStatus", xxlJobInfo.getTriggerStatus());  //调度状态:0-停止,1-运行
            paramMap.put("misfireStrategy", xxlJobInfo.getMisfireStrategy());
            paramMap.put("executorParam", xxlJobInfo.getExecutorParam());//入参
            HttpResponse response = HttpRequest.post(path).form(paramMap).execute();
            if (HttpStatus.HTTP_OK != response.getStatus()) {
                logger.error("任务:{} 定时器更新失败", xxlJobInfo.getExecutorParam());
            }
            JSONObject jsonObject = JSON.parseObject(response.body());
            jobId = jsonObject.getIntValue("content");
        } catch (Exception e) {
            logger.error("任务:{} 定时器创建失败", xxlJobInfo.getExecutorParam(), e);
        }
        return jobId;
    }
/**
 * Created by guan
 */
public class XxlJobGroup {

    private int id;
    private String appname;
    private String title;
    private int addressType;        // 执行器地址类型:0=自动注册、1=手动录入
    private String addressList;     // 执行器地址列表,多地址逗号分隔(手动录入)
    private Date updateTime;

    // registry list
    private List<String> registryList;  // 执行器地址列表(系统注册)
    public List<String> getRegistryList() {
        if (addressList!=null && addressList.trim().length()>0) {
            registryList = new ArrayList<>(Arrays.asList(addressList.split(",")));
        }
        return registryList;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAppname() {
        return appname;
    }

    public void setAppname(String appname) {
        this.appname = appname;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getAddressType() {
        return addressType;
    }

    public void setAddressType(int addressType) {
        this.addressType = addressType;
    }

    public String getAddressList() {
        return addressList;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public void setAddressList(String addressList) {
        this.addressList = addressList;
    }

}
/**
 * xxl-job info
 *
 * @author guan
 */
@Data
public class XxlJobInfo {
    
    private int id;                // 主键ID
    
    private int jobGroup;        // 执行器主键ID
    private String jobDesc;
    
    private Date addTime;
    private Date updateTime;
    
    private String author;        // 负责人
    private String alarmEmail;    // 报警邮件

    private String scheduleType;            // 调度类型
    private String scheduleConf;            // 调度配置,值含义取决于调度类型
    private String misfireStrategy;            // 调度过期策略

    private String executorRouteStrategy;    // 执行器路由策略
    private String executorHandler;            // 执行器,任务Handler名称
    private String executorParam;            // 执行器,任务参数
    private String executorBlockStrategy;    // 阻塞处理策略
    private int executorTimeout;             // 任务执行超时时间,单位秒
    private int executorFailRetryCount;        // 失败重试次数
    
    private String glueType;        // GLUE类型    #com.xxl.job.core.glue.GlueTypeEnum
    private String glueSource;        // GLUE源代码
    private String glueRemark;        // GLUE备注
    private Date glueUpdatetime;    // GLUE更新时间

    private String childJobId;        // 子任务ID,多个逗号分隔

    private int triggerStatus;        // 调度状态:0-停止,1-运行
    private long triggerLastTime;    // 上次调度时间
    private long triggerNextTime;    // 下次调度时间
}
    /**
     * 获取XxlJobInfo
     *
     * @param jobDesc
     * @return
     */
    public XxlJobInfo getXxlJobInfo(String jobDesc){
        String path = adminAddresses + JOB_INFO_LIST;
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("jobDesc", jobDesc);
        paramMap.put("jobGroup", getJobGroupId(JOB_GROUP_LIST));
        paramMap.put("triggerStatus", -1);
        HttpResponse response = HttpRequest.post(path).form(paramMap).execute();
        // 拿到数据进行转换
        Map<String, Object> stringObjectMap = JSON.parseObject(response.body(), new TypeReference<Map<String, Object>>() {});
        List<XxlJobInfo> list = JSON.parseArray(String.valueOf(stringObjectMap.get("data")),XxlJobInfo.class);
        return list.get(0);
    }

3.定时任务使用

/**
 * XxlJob开发示例(Bean模式)
 *
 * 开发步骤:
 *      1、任务开发:在Spring Bean实例中,开发Job方法;
 *      2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
 *      3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志;
 *      4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果;
 *
 * @author guan
 */
@Slf4j
@Component
@Configuration
public class SyncJob {
    
    /**
     * 调度任务
     */
    @XxlJob(value = "SynchronizationJob")
    public void execute(){
       System.out.println("开始调度!");
   } 
}

 

标签:定时器,String,private,job,paramMap,put,public,xxl
来源: https://www.cnblogs.com/gakblog/p/16358622.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有