首先我们需要了解什么是xxl-job-admin以及Docker。xxl-job-admin是一款轻量级分布式任务调度平台,可以实现任务的自动调度和执行管理等功能。Docker是一种容器化技术,可以快速构建、部署、升级应用,提高开发和生产的效率。
在使用Docker部署xxl-job-admin时,可能会出现数据库拒绝连接的问题,这是因为xxl-job-admin默认使用的是SQLite数据库,而Docker运行容器时默认会使用/tmp目录下的空间存储数据,而且容器运行结束后,该存储空间会被清空。因此,使用SQLite数据库时容易出现数据丢失的问题。
一种解决方法是使用Docker中的数据卷来存储SQLite数据库的数据。下面是具体的步骤:
docker volume create xxl_job_data
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数据库。下面是具体步骤:
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;
将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
将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