java 多定时任务_多机部署之定时任务完整方案

本文介绍了在多机部署环境下,为避免定时任务重复执行,采用AOP结合排他锁的策略。通过AOP对@Scheduled注解进行拦截,并利用数据库中的版本号进行分布式锁控制,确保批处理的高可用性和不重复执行。
摘要由CSDN通过智能技术生成

1.场景描述

老项目需要多机部署,项目中有几十个定时任务,一旦多机部署,定时任务就会重复执行,固定ip与错开时间方案都存在较大弊端,最终采用的方案是:AOP+排他锁的方式,软件老王已验证通过,介绍下,有需要的朋友可以参考下。

2.解决方案

软件老王基本方案是采用:AOP+排他锁的方式。

(1)目前老项目有几十个定时任务,采用AOP的方式,可以保证代码的无侵入(即使简单的微侵入,例如增加几行代码,测试验证的工作量也会比较大的)。

(2)采用排他锁的方式,保证批处理的高可用,不重复执行。

2.1 AOP编程

Aop的概念就不说了,就是面向切面编程,通俗点就是统一处理一类问题,比如日志、请求鉴权等,刚开始不确定是否可行,系统中的批处理是使用spring注解的方式@Scheduled进行批处理,采用aop对注解@Scheduled进行编程,统一拦截批处理,代码如下:

/**

* 软件老王-AOP处理类

*/

@Aspect

@Component

public class ScheduledAspect {

@Autowired

ScheduleService scheduleService ;

@Pointcut( "@annotation(org.springframework.scheduling.annotation.Scheduled)")

public void scheduled() {

}

@Around("scheduled()")

public Object scheduled(ProceedingJoinPoint pjd) {

Object result = null;

String taskName = pjd.getSignature().getName();

try {

if (scheduleService.isInvoke(taskName)){

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值