java 大量定时任务_Java应用多机器部署解决大量定时任务问题

本文介绍了一种在Java多机部署环境下解决定时任务仅由一台机器执行的方案。通过利用MySQL的锁机制,创建一个包含执行状态的表,确保每次只有一个任务执行。文章详细阐述了代码实现,包括Spring的定时任务配置、任务状态验证和数据库操作,提供了一个简单而实用的思路。
摘要由CSDN通过智能技术生成

今天来说一个Java多机部署下定时任务的处理方案。

需求: 有两台服务器同时部署了同一套代码, 代码中写有spring自带的定时任务,但是每次执行定时任务时只需要一台机器去执行。

当拿到这个需求时我脑子中立马出现了两个简单的解决方案:

利用ip进行判断, 两台机器ip肯定不一样, 指定某一台机器的ip运行。

只在一台机器上部署定时任务的代码。

最后两个方案又都被自己否决了。 第一条,如果指定ip的机器出现了问题怎么办? 例如说宕机了, 那么该制定ip的机器上的定时任务是不是就无法运行了?如果以后该服务器迁移导致ip变化怎么办?

第二条, 同上, 还有就是要维护两套代码很不方便。

因为上面两个假设都不成立, 只能另找他法。 于是便想到利用mysql去解决, 之前了解过一点mysql的锁机制, 知道如果有同时的两个任务去写数据库中同一条记录, 只有一条会成功, 这是利用了mysql的排他锁。

下面就开始代码演示, 这里主要想给大家的是一个思路的提示, 代码还是很简单的。

首先需要单独创建一张表

CREATE TABLE `t_schedule_cluster` (

`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '@cname:主键',

`execute` int(1) NOT NULL COMMENT '@cname:执行状态',

`version` int(11) NOT NULL COMMENT '@cname:版本号\r\n ',

`task_name` varchar(128) NOT NULL COMMENT '@cname:任务名称\r\n ',

`execute_ip` varchar(32) DEFAULT NULL COMMENT '@cname:执行ip\r\n ',

`update_time` datetime DEFAULT NULL COMMENT '@cname:修改时间\r\n ',

PRIMARY KEY (`id`),

KEY `I

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值