xxl job 任务调度框架 快速开始

doc

1 初始化“调度数据库”

地址:https://github.com/xuxueli/xxl-job/blob/master/doc/db/tables_xxl_job.sql

2 部署“调度中心”

docker pull xuxueli/xxl-job-admin:2.2.0


docker run --restart always -e PARAMS="--spring.datasource.url=jdbc:mysql://ip:port/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=root --spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver" -p 8089:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin:2.2.0

访问 http://192.168.0.36:8089/xxl-job-admin/
admin 123456

3 部署“执行器项目”

3.1 maven

        <!-- xxl-job-core -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.2.0</version>
        </dependency>

3.2 执行器配置

application.properties

### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://ip:port/xxl-job-admin
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=task-course
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/opt/logs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30

3.3 执行器组件配置

package com.aa.task.bb.config

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Value
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration


/**
 * @program: xxxx
 *
 * @description: XxlJobConfig
 *
 * @author: loulvlin
 *
 * @create: 2020-07-23 13:18
 **/
@Configuration
class XxlJobConfig {
    /** logger */
    val logger = LoggerFactory.getLogger(this.javaClass)


    @Value("\${xxl.job.admin.addresses}")
    private val adminAddresses: String? = null

    @Value("\${xxl.job.accessToken}")
    private val accessToken: String? = null

    @Value("\${xxl.job.executor.appname}")
    private val appname: String? = null

    @Value("\${xxl.job.executor.address}")
    private val address: String? = null

    @Value("\${xxl.job.executor.ip}")
    private val ip: String? = null

    @Value("\${xxl.job.executor.port}")
    private val port = 0

    @Value("\${xxl.job.executor.logpath}")
    private val logPath: String? = null

    @Value("\${xxl.job.executor.logretentiondays}")
    private val logRetentionDays = 0

    @Bean
    fun xxlJobExecutor(): XxlJobSpringExecutor {
        logger.info(">>>>>>>>>>> xxl-job config init.")
        val xxlJobSpringExecutor = 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
    }
}

3.4 job开发

package com.aa.task.bb.job

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
import com.xxl.job.core.biz.model.ReturnT
import com.xxl.job.core.handler.annotation.XxlJob
import com.xxl.job.core.log.XxlJobLogger
import org.springframework.stereotype.Component
import java.text.SimpleDateFormat
import javax.annotation.Resource


/**
 * @program: xxx
 *
 * @description: EvaluationLikeJob
 *
 * @author: loulvlin
 *
 * @create: 2020-07-23 10:43
 **/
@Component
class EvaluationLikeJob {

    @Resource
    lateinit var evaluationLikeService: IEvaluationLikeService

    @Resource
    lateinit var redisUtil: RedisUtil

    @XxlJob("likeJobHandler")
    @Throws(Exception::class)
    fun likeJobHandler(param: String): ReturnT<String> {
        XxlJobLogger.log("XXL-JOB, likeJobHandler begin")

        var likeList = ArrayList<EvaluationLike>()
        var evaluationLike: EvaluationLike
        var resultMap = redisUtil.hgetAll("like")
        var keyTemp:String
        var keyListTemp:List<String>
        if (resultMap.isNotEmpty()) {
            resultMap.forEach {
                evaluationLike = EvaluationLike()
                keyTemp = it.key.toString()
                keyListTemp = keyTemp.split(":")
                evaluationLike.evaluationId = keyListTemp[0].toInt()
                evaluationLike.userId = keyListTemp[1].toInt()
                evaluationLike.valid = keyListTemp[2]
                evaluationLike.createTime = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(it.value.toString())
                likeList.add(evaluationLike)
            }
        }
        evaluationLikeService.saveOrUpdateBatch(likeList)
        return ReturnT.SUCCESS
    }

    @XxlJob("clearLikeJobHandler")
    @Throws(Exception::class)
    fun clearLikeJobHandler(param: String): ReturnT<String> {
        XxlJobLogger.log("XXL-JOB, clearLikeJobHandler begin")
        evaluationLikeService.remove(QueryWrapper<EvaluationLike>().eq("valid",0))
        return ReturnT.SUCCESS
    }
}

3.5 jar包部署运行

启动日志

2020-07-23 14:38:24.678 INFO  - [main] c.x.j.c.e.XxlJobExecutor.registJobHandler(168): >>>>>>>>>>> xxl-job register jobhandler success, name:likeJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@57b130f6[class com.aos.task.cource.job.EvaluationLikeJob#likeJobHandler]
2020-07-23 14:38:24.678 INFO  - [main] c.x.j.c.e.XxlJobExecutor.registJobHandler(168): >>>>>>>>>>> xxl-job register jobhandler success, name:clearLikeJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@67e4928c[class com.aos.task.cource.job.EvaluationLikeJob#clearLikeJobHandler]
2020-07-23 14:38:24.783 INFO  - [Thread-34] c.x.j.c.s.EmbedServer.run(86): >>>>>>>>>>> xxl-job remoting server start success, nettype = class com.xxl.job.core.server.EmbedServer, port = 9999

4 调度中心配置任务

4.1 创建执行器

AppName is xxl.job.executor.appname=task-course

在这里插入图片描述

4.2 创建任务

JobHandler is @XxlJob(“likeJobHandler”)中的likeJobHandler
在这里插入图片描述

4.3 任务启动测试

  • 任务管理 操作 执行一次
  • 调度日志 查看最新日志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值