赞
踩
官方文档:
分布式任务调度平台XXL-JOB
写最好的Docker安装最新版MySQL8(mysql-8.0.31)教程(参考Docker Hub和MySQL官方文档)_docker mysql8-CSDN博客
进入 mysql 容器
# 查看当前的容器 。确保 mysql 容器运行中
docker ps -a
# 交互式进入容器
docker exec -it e0788a971ce9 /bin/bash
以 root 用户连接mysql
mysql -u root -p
使用mysql 数据库
use mysql;
创建用户 xxljob
# 创建用户 xxljob 并设置密码 123456
create user xxljob@'%' identified by '123456';
授权&刷新权限
# 授予 xxljob 用户所有数据库所有表的权限(当然也可以只授权 xxl_job 数据库)
# 第一个* 代表所有数据库 第二个*代表所有表。xxl_job.* 代表xxl_job 库下的所有表
grant all privileges on *.* to xxljob@'%' with grant option;
# 刷新权限
flush privileges;
设置 xxljob 用户支持远程密码连接
alter user xxljob@'%' identified with mysql_native_password by '123456';
之后就可以用 xxljob 用户连接了。
我这里选择用 goland 的数据库连接工具来连接数据库。由于docker 将 mysql 容器的3306 端口映射到了本机,所以可以使用 127.0.0.1 连接。docker真是太强了!
连接后开启一个会话,执行官方脚本就行。我这里用的 2.4.2 版本的sql脚本。
1 选择sql文件
2 在 xxl_job 上新建一个会话
3 全选内容并执行
xxl_job 下有如下表
之前我们 sql 文件用的 2.4.2 版本的文件。镜像可以用 2.4.0 (2.4.2镜像没拉到,应该是2.x 版本是通用的)。好多教程是 2.0.x 或者 2.2.x 版本的。会遇到 表字段不对的问题,很明显作者有更新,感兴趣可以看下源码。
docker pull xuxueli/xxl-job-admin:2.4.0
我们的 mysql 也是通过 docker 安装的。所以两个容器之间通信需要他们容器内ip
直接命令获取 这里最后是你的容器名称或id 。我们要获取mysql 容器的,所以是mysql
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql
查看网络配置获取
首先获取 docker 的可用网络
docker network ls
然后查看 beidge 的网络详情。可以看到 mysql 得ip 为 172.17.0.2
docker network inspect 0608ff7e961a
命令解释:
-e 指定参数
–spring.datasource.url 指定mysql 连接的 dsn ip为 2.2 获取的 mysql 容器ip
–spring.datasource.username 指定 mysql 连接的用户
–spring.datasource.password 指定 mysql 连接用户的密码
-p 将本机的 8080 端口的流量转发到 xxljob-admin 容器的 8080 端口
-v 将容器的 /data/applogs 目录挂载到本机 /Users/xwh/volumes/xxl-job/applogs 目录 (/Users/xwh 目录是当前用户的家目录~)该目录自定义即可。
–name 容器名设置为 xxl-job-admin-2.4.0
最后使用 xuxueli/xxl-job-admin:2.4.0 这个镜像创建并运行容器
docker run
-e PARAMS="--spring.datasource.url=jdbc:mysql://172.17.0.2:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 --spring.datasource.username=xxljob --spring.datasource.password=123456"
-p 8080:8080
-v /Users/xwh/volumes/xxl-job/applogs:/data/applogs
--name xxl-job-admin-2.4.0 xuxueli/xxl-job-admin:2.4.0
容器运行后。在本机浏览器访问 http://127.0.0.1:8080/xxl-job-admin 即可进入xxljob管理端。默认用户 admin 密码 123456 。登录成功就大功告成了!
已上传github 和gitee。
GitHub - ainiou/xxljob-demo
181s/xxljob-demo
稍微讲下配置文件,这个 ServerAddr 一定要带上 /xxl-job-admin ,不然注册 404;AccessToken 启动时没指定的话就用 default_token 。 AppName 没啥注意的,就是跟执行器AppName 一致 。Port 别被其他服务占用就行。
[xxljob] # xxljob的配置
ServerAddr = "http://127.0.0.1:8080/xxl-job-admin" # xxl-job-admin地址
AccessToken = "default_token" # xxl-job-admin accessToken
AppName = "xxljob-demo" # 执行器名称 一般对应自己的应用名
Port = 8088 # 执行器端口 默认9999
可以参考官方文档。我这基于上面的代码给个例子。
在执行器管理新增一个执行器。AppName 一般是服务名称,只要代码配置中的AppName 要与之对应就行,我这里取服务吗 xxljob-demo;名称随便。注册方式的话,自动注册会由服务启动后自动订阅该执行器的任务;手动录入则自己输入自己服务的 ip:port。这里我们直接选择自动注册。
点启动就行。启动之后可以看下注册节点,应该是空的,需要我们启动服务来运行客户端。
在服务目录下执行
go run main.go
或者ide启动main函数。启动后控制定时输出 执行器注册成功。(要是 404 看 3.1);回后台可以看到注册节点已经有本机ip:port 了。没有就刷新下,还没有就是有问题了。
启动后可以看到,没分钟的第0s 都执行了 hello 路由下的逻辑。即打印hello world 与当前时间。
想立即看效果还可以在后台任务操作里选择 执行一次。会立即执行,可以自己试试看。
意思是 找不到 job_cron 字段。联系上下文看到是 xxl_job_info 表的 job_cron 字段。我们从最新的官方sql脚本可以看到,xxl_job_info 确实是没有 job_cron 字段的。
xxl-job/doc/db/tables_xxl_job.sql at master · xuxueli/xxl-job
原因:XXLJOB 迭代可能移除了该字段。
解决:镜像应该拉取较新的 tag。由于作者没有维护 least 版本,我们也很难知道应该拉取哪个tag。有个技巧是参考分支拉取镜像。比如我这里用 2.4.0 中的 sql 脚本文件执行。那就拉取 2.4.0 tag 的docker 镜像。
原因与解决办法同1,都是版本问题。
原因:dbname 是 xxl_job 而不是 xxl-job 。有篇blog 有误导。可能只有我没注意到吧.
权限错误。官方命令默认使用 root 用户,密码为 123456 登录mysql 。但是msql 的 root 用户默认不允许远程连接。我们可以把root用户设置为远程连接。但不推荐。这里采用新建 xxljob 用户,并开放 xxljob 用户远程连接权限的方式。具体参考 1.2 。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。