关于springboot Schedule定时任务同一时刻只执行一个任务的问题

我写了一个简单的任务bean,两个执行任务,时间是同一时刻,在数据库模式下只执行了一个任务。改为内存模式即可解决问题

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; /** * 测试定时任务(演示Demo,可删除) * <p> * testTask为spring bean的名称 * * @author crazySea * @email 960236576@qq.com */ @Component("testTask") public class TestTask implements ITask { private Logger logger = LoggerFactory.getLogger(getClass()); @Override public void run(String params) { logger.debug("TestTask定时任务正在执行,参数为:{}", params); } }

解决方案如下:

import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import javax.sql.DataSource; import java.util.Properties; /** * 定时任务配置 * 默认是单线程执行的,同一个时间触发的是串行执行的 * 使用内存模式就可以同一时刻执行多个任务 * @author KURO */ @Slf4j @Configuration public class ScheduleConfig{ @Bean public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) { SchedulerFactoryBean factory = new SchedulerFactoryBean(); // factory.setDataSource(dataSource); //quartz参数 Properties prop = new Properties(); prop.put("org.quartz.scheduler.instanceName", "SlowcomScheduler"); prop.put("org.quartz.scheduler.instanceId", "AUTO"); //线程池配置 prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); prop.put("org.quartz.threadPool.threadCount", "20"); prop.put("org.quartz.threadPool.threadPriority", "5"); //JobStore配置 //使用数据库定时任务 // prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX"); //使用内存定时任务 prop.put("org.quartz.jobStore.class", "org.quartz.simpl.RAMJobStore"); // //集群配置 // prop.put("org.quartz.jobStore.isClustered", "true"); // prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); // prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1"); // // prop.put("org.quartz.jobStore.misfireThreshold", "12000"); // prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); //PostgreSQL数据库,需要打开此注释 //prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate"); factory.setQuartzProperties(prop); factory.setSchedulerName("SlowcomScheduler"); //延时启动 factory.setStartupDelay(0); // factory.setApplicationContextSchedulerContextKey("applicationContextKey"); // //可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 // factory.setOverwriteExistingJobs(true); //设置自动启动,默认为true factory.setAutoStartup(true); return factory; } }

__EOF__

本文作者KURO · Liang
本文链接https://www.cnblogs.com/kuro-liang/articles/13902802.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   KURO、Liang  阅读(3435)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示