当前位置: 首页 > wzjs >正文

个人站长怎么做企业网站珠海做网站的公司

个人站长怎么做企业网站,珠海做网站的公司,网站 建设情况,电信备案新增网站在Spring Boot 3中实现分布式定时任务,确保多实例环境下任务仅执行一次,可以采用以下方案: 方案一:Redis分布式锁(推荐) import org.springframework.data.redis.core.StringRedisTemplate; import org.sp…

在Spring Boot 3中实现分布式定时任务,确保多实例环境下任务仅执行一次,可以采用以下方案:


方案一:Redis分布式锁(推荐)

import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.Duration;
import java.util.concurrent.TimeUnit;@Component
public class DistributedScheduler {private final StringRedisTemplate redisTemplate;private static final String LOCK_KEY = "TASK_LOCK:MY_TASK";private static final int LOCK_TIMEOUT = 9; // 锁超时时间(分钟)public DistributedScheduler(StringRedisTemplate redisTemplate) {this.redisTemplate = redisTemplate;}@Scheduled(cron = "0 */10 * * * *")public void scheduledTask() {Boolean lockAcquired = redisTemplate.opsForValue().setIfAbsent(LOCK_KEY, "locked", Duration.ofMinutes(LOCK_TIMEOUT));if (lockAcquired != null && lockAcquired) {try {// 执行任务逻辑performTask();} finally {// 任务完成后手动释放锁(可选)// redisTemplate.delete(LOCK_KEY);}}}private void performTask() {// 具体任务代码System.out.println("Task executed at: " + new Date());}
}

依赖配置:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

关键点:

  1. 使用 setIfAbsent 原子性操作获取锁,避免并发问题。
  2. 设置锁的自动过期时间(略小于任务间隔),防止死锁。
  3. 根据业务需求选择是否手动释放锁(如任务执行时间可能超过锁超时时间)。

方案二:数据库乐观锁

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;@Component
public class DatabaseLockScheduler {@Scheduled(cron = "0 */10 * * * *")@Transactionalpublic void scheduledTask() {// 1. 查询最近一次任务记录TaskLock lastLock = taskLockRepository.findTopByTaskNameOrderByExecuteTimeDesc("MY_TASK");// 2. 检查是否已执行过if (lastLock != null && lastLock.getExecuteTime().isAfter(LocalDateTime.now().minusMinutes(10))) {return;}// 3. 插入新记录(利用唯一约束或版本号控制并发)TaskLock newLock = new TaskLock("MY_TASK", LocalDateTime.now());taskLockRepository.save(newLock);// 执行任务逻辑performTask();}
}

实体类示例:

@Entity
public class TaskLock {@Idprivate String taskName;private LocalDateTime executeTime;@Versionprivate Integer version;// 省略构造方法/getter/setter
}

关键点:

  1. 使用数据库唯一约束(复合唯一索引)或版本号控制并发。
  2. 需要处理可能的异常(如唯一约束冲突)。

方案三:Quartz集群模式

配置步骤:

  1. 添加依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
  1. 配置数据库存储(application.properties):
spring.quartz.job-store-type=jdbc
spring.quartz.properties.org.quartz.jobStore.isClustered=true
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=20000
  1. 定义任务:
public class MyJob implements Job {@Overridepublic void execute(JobExecutionContext context) {// 任务逻辑}
}
  1. 配置调度器:
@Configuration
public class QuartzConfig {@Beanpublic JobDetail jobDetail() {return JobBuilder.newJob(MyJob.class).withIdentity("myTask").storeDurably().build();}@Beanpublic Trigger trigger() {return TriggerBuilder.newTrigger().forJob(jobDetail()).withSchedule(CronScheduleBuilder.cronSchedule("0 */10 * * * ?")).build();}
}

方案对比

方案优点缺点
Redis锁实现简单,性能高依赖Redis,需处理锁续期问题
数据库锁无需额外中间件数据库压力大,需处理并发冲突
Quartz集群官方集群支持,功能强大配置复杂,依赖数据库表结构

选择建议:

  • 轻量级场景优先使用Redis锁
  • 已有数据库基础设施可考虑数据库锁
  • 复杂调度需求选择Quartz集群
http://www.dtcms.com/wzjs/513645.html

相关文章:

  • 佛山网站建设开发潍坊网站收录
  • pageadmin的最新版本怎么网站排名seo
  • 网站如何绑定虚拟主机怎样做市场营销策划
  • 如何做网站建设永州网站seo
  • 网络设计与网站建设第3章在线测试新闻发布平台有哪些
  • 微商城 微网站制作中国站长之家域名查询
  • 做空间的网站百度投诉中心人工电话
  • 动态网站建设简答题标记的主要作用网页设计与制作教程
  • 福州p2p网站建设公司网站建设与管理是干什么的
  • 温州做网站 掌熊号新产品上市推广策划方案
  • 企业网站直销有哪些广东省自然资源厅
  • 网络优化这个行业怎么样广州seo推广公司
  • 2021最旺公司名字seo研究中心好客站
  • 做vi设计的网站百度seo排名点击软件
  • 看国外网站如何做科普百度搜索网站
  • 郑州哪些公司做网站比较好南宁seo内部优化
  • 一份完整的个人简历模板宁波好的seo外包公司
  • 买网站不给我备案西安全网优化
  • 网站建设功能清单雏鸟app网站推广
  • 茶酒行业网站建设营销网站搭建
  • 网站模版保护域名跳转大连网络营销seo
  • 网页制作与网站建设技术详解nba排名最新赛程
  • wordpress建站落后吗奶茶软文案例300字
  • 怀柔网站制作公司吉林seo排名公司
  • 做soho外贸网站市场营销案例分析
  • 天津网站制作安徽网站优化
  • 网站优化推广排名app开发公司排名
  • 视频门户网站建设方案株洲seo推广
  • 学网站软件设计搜索引擎优化公司排行
  • 网站建设要做哪些工作室沈阳网站建设制作公司