您的位置:首页 > 财经 > 产业 > 2023企业所得税300万以上_seo网络推广外包公司_ip域名解析查询_百度app客服电话

2023企业所得税300万以上_seo网络推广外包公司_ip域名解析查询_百度app客服电话

2025/2/26 9:58:11 来源:https://blog.csdn.net/qq_45169968/article/details/145665704  浏览:    关键词:2023企业所得税300万以上_seo网络推广外包公司_ip域名解析查询_百度app客服电话
2023企业所得税300万以上_seo网络推广外包公司_ip域名解析查询_百度app客服电话

Spring Scheduling Tasks+Redis实现分布式定时任务

介绍

ShedLock是一个在分布式环境中使用的定时任务框架,用于解决在分布式环境中的多个实例的相同定时任务在同一时间点重复执行的问题。ShedLock确保计划的任务最多同时执行一次。如果一个任务正在一个节点上执行,它会获得一个锁,该锁将阻止从另一个节点(或线程)执行同一任务。请注意,如果一个任务已经在一个节点上执行,则在其他节点上的执行不会等待,只是将其跳过。简单来说,ShedLock本身只做一件事情:保证一个任务最多同时执行一次。所以如官网所说的,ShedLock不是一个分布式调度器,只是一个锁!

实现

引入依赖

<!-- Spring Scheduling Tasks -->
<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-spring</artifactId><version>4.23.0</version>
</dependency><!-- Spring Scheduling Tasks Redis -->
<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-provider-redis-spring</artifactId><version>4.23.0</version>
</dependency>

配置

@Configuration
public class ScheduledLockConfig {@Beanpublic LockProvider lockProvider(RedisConnectionFactory connectionFactory) {return new RedisLockProvider(connectionFactory);}
}

配置启动类

@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "3m")
@SpringBootApplication()
public class SystemApplication {public static void main(String[] args) {SpringApplication.run(SystemApplication.class, args);}}

@EnableScheduling:开启Spring自带定时任务

@EnableSchedulerLock:开启分布式定时任务服务,defaultLockAtMostFor默认最多锁定多久,这里设置的3分钟

创建定时任务

@Slf4j
@Component
public class LogJob {/*** 每月1号凌晨4点执行*/@Scheduled(cron = "0 0 4 1 * ?")//name:锁的唯一标识符//lockAtMostFor:指定如果任务执行完成但未能正确释放锁时,锁最多保持的时间,防止死锁,这里设置的2分钟//lockAtLeastFor:锁至少持有多久,对于那些执行速度可能非常快的任务特别有用,它保证了即使任务快速完成,锁也会保持一定的时间,从而防止过于频繁地尝试获取锁的情况。这里设置1分钟@SchedulerLock(name = "xxx", lockAtMostFor = "2m", lockAtLeastFor = "1m")public void clearGatewayLog() {try {log.info("开始执行-分布式定时任务");...业务逻辑log.info("执行完成-分布式定时任务");} catch (Exception e) {log.error("执行失败-分布式定时任务", e);}}
}

参考

https://blog.csdn.net/a767815662/article/details/104459814
https://sca.aliyun.com/docs/2023/user-guide/schedulerx/quick-start/?# Spring Scheduling Tasks+Redis实现分布式定时任务

介绍

ShedLock是一个在分布式环境中使用的定时任务框架,用于解决在分布式环境中的多个实例的相同定时任务在同一时间点重复执行的问题。ShedLock确保计划的任务最多同时执行一次。如果一个任务正在一个节点上执行,它会获得一个锁,该锁将阻止从另一个节点(或线程)执行同一任务。请注意,如果一个任务已经在一个节点上执行,则在其他节点上的执行不会等待,只是将其跳过。简单来说,ShedLock本身只做一件事情:保证一个任务最多同时执行一次。所以如官网所说的,ShedLock不是一个分布式调度器,只是一个锁!

实现

引入依赖

<!-- Spring Scheduling Tasks -->
<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-spring</artifactId><version>4.23.0</version>
</dependency><!-- Spring Scheduling Tasks Redis -->
<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-provider-redis-spring</artifactId><version>4.23.0</version>
</dependency>

配置

@Configuration
public class ScheduledLockConfig {@Beanpublic LockProvider lockProvider(RedisConnectionFactory connectionFactory) {return new RedisLockProvider(connectionFactory);}
}

配置启动类

@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "3m")
@SpringBootApplication()
public class SystemApplication {public static void main(String[] args) {SpringApplication.run(SystemApplication.class, args);}}

@EnableScheduling:开启Spring自带定时任务

@EnableSchedulerLock:开启分布式定时任务服务,defaultLockAtMostFor默认最多锁定多久,这里设置的3分钟

创建定时任务

@Slf4j
@Component
public class LogJob {/*** 每月1号凌晨4点执行*/@Scheduled(cron = "0 0 4 1 * ?")//name:锁的唯一标识符//lockAtMostFor:指定如果任务执行完成但未能正确释放锁时,锁最多保持的时间,防止死锁,这里设置的2分钟//lockAtLeastFor:锁至少持有多久,对于那些执行速度可能非常快的任务特别有用,它保证了即使任务快速完成,锁也会保持一定的时间,从而防止过于频繁地尝试获取锁的情况。这里设置1分钟@SchedulerLock(name = "xxx", lockAtMostFor = "2m", lockAtLeastFor = "1m")public void clearGatewayLog() {try {log.info("开始执行-分布式定时任务");...业务逻辑log.info("执行完成-分布式定时任务");} catch (Exception e) {log.error("执行失败-分布式定时任务", e);}}
}

参考

https://blog.csdn.net/a767815662/article/details/104459814
https://sca.aliyun.com/docs/2023/user-guide/schedulerx/quick-start/?

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com