沃梦达 / IT编程 / 数据库 / 正文

docker部署xxl-job-admin出现数据库拒绝问题及解决方法

首先我们需要了解什么是xxl-job-admin以及Docker。xxl-job-admin是一款轻量级分布式任务调度平台,可以实现任务的自动调度和执行管理等功能。Docker是一种容器化技术,可以快速构建、部署、升级应用,提高开发和生产的效率。

首先我们需要了解什么是xxl-job-admin以及Docker。xxl-job-admin是一款轻量级分布式任务调度平台,可以实现任务的自动调度和执行管理等功能。Docker是一种容器化技术,可以快速构建、部署、升级应用,提高开发和生产的效率。

在使用Docker部署xxl-job-admin时,可能会出现数据库拒绝连接的问题,这是因为xxl-job-admin默认使用的是SQLite数据库,而Docker运行容器时默认会使用/tmp目录下的空间存储数据,而且容器运行结束后,该存储空间会被清空。因此,使用SQLite数据库时容易出现数据丢失的问题。

一种解决方法是使用Docker中的数据卷来存储SQLite数据库的数据。下面是具体的步骤:

  1. 创建名为xxl_job_data的数据卷
docker volume create xxl_job_data
  1. 启动xxl-job-admin容器,并将数据卷挂载到容器的/data/xxl-job/db目录
docker run -d --name xxl-job-admin -p 8080:8080 -v xxl_job_data:/data/xxl-job/db xuxueli/xxl-job-admin:2.2.0

通过上述步骤,我们成功解决了xxl-job-admin使用SQLite数据库时出现的数据丢失问题。

除了使用数据卷来解决数据库拒绝连接的问题外,还可以将数据库修改为MySQL,并修改xxl-job-admin的配置文件来连接MySQL数据库。下面是具体步骤:

  1. 创建名为xxl_job_mysql的MySQL容器,并且创建名为xxl_job的数据库和名为xxl_job_user的用户,并授予其所有权限
docker run -d --name xxl_job_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=xxl_job -e MYSQL_USER=xxl_job_user -e MYSQL_PASSWORD=xxl_job_user_pwd mysql:5.7
docker exec -it xxl_job_mysql bash
mysql -uroot -p
CREATE USER 'xxl_job_user'@'%' IDENTIFIED BY 'xxl_job_user_pwd';
GRANT ALL PRIVILEGES ON xxl_job.* TO 'xxl_job_user'@'%';
FLUSH PRIVILEGES;
  1. 修改xxl-job-admin的配置文件。

将xxl-job-admin的配置文件(/data/xxl-job/job-admin/application.properties)中的数据库连接信息改为MySQL,同时根据实际情况修改username、password、url等参数。

## spring datasource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://xxl_job_mysql:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
spring.datasource.username=xxl_job_user
spring.datasource.password=xxl_job_user_pwd
  1. 启动xxl-job-admin容器。

将xxl_job_mysql容器的docker-compose.yml文件如下:

version: '3.1'
services:
  xxl_job_mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: xxl_job
      MYSQL_USER: xxl_job_user
      MYSQL_PASSWORD: xxl_job_user_pwd
    ports:
      - 3306:3306
    volumes:
      - xxl_job_mysql:/var/lib/mysql
  xxl_job_admin:
    image: xuxueli/xxl-job-admin:2.2.0
    restart: always
    ports:
      - "8080:8080"
    environment:
      - PARAMS_SERVER_ADDRESS=http://127.0.0.1:7001
      - PARAMS_ACCESS_TOKEN=xxl
      - PARAMS_LOG_PATH=/data/applogs/xxl-job/jobhandler
      - PARAMS_LOG_RETAIN_DAYS=3
    volumes:
      - xxl_job_data:/data/xxl-job/db
      - ./logs:/data/applogs/xxl-job/jobhandler
    depends_on:
      - xxl_job_mysql

volumes:
  xxl_job_data:
  xxl_job_mysql:

通过上述步骤,我们成功将xxl-job-admin连接到了MySQL数据库,解决了使用SQLite时出现的数据丢失问题。

参考文献:
[1] https://www.jianshu.com/p/6fa079ebc46e
[2] https://github.com/xuxueli/xxl-job/blob/master/doc/doc_zh/Install.md

本文标题为:docker部署xxl-job-admin出现数据库拒绝问题及解决方法