XXL-JOB gitee地址 gitee.com/xuxueli0323…
XXL-JOB 文档地址www.xuxueli.com/xxl-job/
一、docker 部署调度中心
- 新建表 sql 语句在项目里
/xxl-job/doc/db/tables_xxl_job.sql
在目标数据库执行语句建库、建表 - 拉取docker镜像
# docker pull xuxueli/xxl-job-admin:版本号
docker pull xuxueli/xxl-job-admin:2.3.0
- 启动
-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部署成功,效果如下:
部署完毕后,登录成功!(默认账号/密码:admin/123456)
二、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,让它进行重试