docker部署xxl-job调度中心详解

549 阅读2分钟

XXL-JOB gitee地址 gitee.com/xuxueli0323…

XXL-JOB 文档地址www.xuxueli.com/xxl-job/

一、docker 部署调度中心

  1. 新建表 sql 语句在项目里 /xxl-job/doc/db/tables_xxl_job.sql 在目标数据库执行语句建库、建表
  2. 拉取docker镜像
# docker pull xuxueli/xxl-job-admin:版本号
docker pull xuxueli/xxl-job-admin:2.3.0
  1. 启动 -e PARAMS 后的参数可以在 gitee.com/xuxueli032/… 里参照
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.xx.xx:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
--spring.datasource.username=xxx --spring.datasource.password=xxx --xxl.job.accessToken=dasj2nd81jf9asjdkl5jk234" -p 9090:8080 --name xxl-job-admin  -d xuxueli/xxl-job-admin:2.3.0

注意,mysql的地址如果是宿主机的,不要写成localhost或者127.0.0.1了,要写ip。我个人是用docker部署的mysql5.7,没写ip报错如下:

"org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: <br/>### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.<br/>### The error may exist in class path resource [mybatis-mapper/XxlJobUserMapper.xml]<br/>### The error may involve com.xxl.job.admin.dao.XxlJobUserDao.loadByUserName<br/>### The error occurred while executing a query<br/>### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up."

xxl.job.accessToken= 是和客户端通信的token, 非空的时候启用, 如果不为空, 则客户端也需要填相同的token 在生产环境最好加上

docker部署成功,效果如下: image.png

部署完毕后,登录成功!(默认账号/密码:admin/123456) image.png

二、yudaocloud整合xxl-job

maven

<!--  Job 相关 -->  
<dependency>  
<groupId>com.xuxueli</groupId>  
<artifactId>xxl-job-core</artifactId>  
<version>2.3.0</version>
</dependency>

配置文件

--- #################### application.yaml 定时任务相关配置 ####################  
xxl:  
job:  
executor:  
appname: ${spring.application.name} # 执行器 AppName  
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径  
accessToken: xxx # 执行器通讯TOKEN

--- #################### application-local.yaml 定时任务相关配置 ####################  
  
xxl:  
job:  
admin:  
addresses: http://192.168.xxx.xxx:9090/xxl-job-admin # 调度中心部署跟地址
@Slf4j  
@Component  
public class AllocationJobHandler {  
    @Resource  
    AllocationResultService allocationResultService;  

    /**  
    * xxx任务  
    */  
    @XxlJob("ppJobHandler")  
    public void execute() {  
        try {  
            log.info("XXL-JOB, execute start.");  
            allocationResultService.xxx();  
            XxlJobHelper.handleSuccess("xxx成功");  
        log.info("XXL-JOB, executeAllocation over.");  
        } catch (Exception e) {  
            XxlJobHelper.handleFail("xxx失败,原因:" + e.getMessage());  
            log.error("XXL-JOB, executeAllocation error. {}",e.getMessage());  
        }  
    }  
}

个性化需求: 因为我自测的时候可能这段定时任务会运行失败,所以我添加了重试机制

XxlJobHelper.handleFail("xxx失败,原因:" + e.getMessage()); //可以反馈给xxl-job-admin,让它进行重试

image.png image.png 参考文章:juejin.cn/post/697169…