以前经常在任务调度程序中使用Spring集成的Quartz,这种方式可以用简单的声明式配置即可实现定时任务,并结合了Spring自身的Bean的管理功能,非常方便。配置样本如下:
- <bean id="transmitTask"
- class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject">
- <ref bean="transTaskBusiness" />
- </property>
- <property name="targetMethod">
- <value>execute</value>
- </property>
- <property name="concurrent">
- <value>false</value>
- </property>
- </bean>
其中concurrent属性标识的解释为:对于相同的JobDetail,当指定多个Trigger时,
很可能第一个job完成之前,第二个job就开始了。指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。
那么此处的第二个job到底是被推迟执行了,还是被取消了呢?
今天带着这个疑问做了一个小实验,具体做法如下:将任务的Trigger设置为每10秒钟执行一次,然后在执行的任务体内让Thread暂停15秒钟,这样不同的job之间肯定会有时间上的重叠。当启动程序之后,发现前一个job执行结束的时刻的秒数为15,而且第二个本来在10s就执行的job马上就启动了。
由此可见,concurrent属性实际是将job推迟执行了。
分类:
一些不常见问题的解决
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?