Java Spring 4@计划停止工作
我正在使用@Scheduled annotation运行cron作业。调度工作一段时间,然后停止工作。 我将给出我的代码的简化片段: 这是调度程序:Java Spring 4@计划停止工作,java,spring,scheduled-tasks,spring-scheduled,Java,Spring,Scheduled Tasks,Spring Scheduled,我正在使用@Scheduled annotation运行cron作业。调度工作一段时间,然后停止工作。 我将给出我的代码的简化片段: 这是调度程序: //org.springframework.scheduling.annotation.Scheduled @Scheduled("*/30 * * * * *") public void performTask() { logger.info("Starting agent"); getAgentAsyncTask().e
//org.springframework.scheduling.annotation.Scheduled
@Scheduled("*/30 * * * * *")
public void performTask() {
logger.info("Starting agent");
getAgentAsyncTask().execute();
logger.info("Ending agent");
}
这是由调度程序执行的任务
//org.springframework.scheduling.annotation.Async
@Async(TASK_EXECUTOR)
@Override
public void execute() {
logger.info("Starting task");
//send some rest requests
logger.info("Ending task");
}
“开始代理”和“结束代理”的记录次数相同。因此,每一个计划都会正确地结束
“开始任务”和“结束任务”的记录次数相同。所以,毫无疑问,“任务”并不是阻止事情
但是过了一段时间它就会停止记录。可能是什么问题
这里,TASK_EXECUTOR是以下bean:
@Bean(TASK_EXECUTOR)
public ThreadPoolTaskExecutor createDefaultTaskExecutor() {
ThreadPoolTaskExecutor te = new ThreadPoolTaskExecutor();
te.setMaxPoolSize(15);
te.setCorePoolSize(15);
te.initialize();
return te;
}
春季版:
4.1.6.1发布
这种情况可能是由调度方法主体中的无限循环引起的,或者如果存在对外部系统的调用,并且控件同步等待以接收响应,而没有任何超时 用这个简单的代码片段自己尝试一下。该方法将仅启动一次,并且在指定的5秒间隔后不会启动
@Scheduled(fixedRate = 5000)
public void printPeriodically() {
System.out.println("This is my periodic method");
while(true) {};
}
看看乔布斯是否被绞死。万一有。。任务将不会在一段时间后执行,我的意思是在达到最大池大小之后。检查实现代码在成功执行后是否释放线程 您是在容器内部还是外部运行此操作?另外,容器中的Java版本是什么(基于注释的配置,我有@enablespatching@enablesync)。Java版本8阅读了吗?正如@Xenotracide链接的顶部答案所述,kill-3(或使用JVisualVM)能给你带来什么?=>要查看是否有线程被困在某个地方,实际上,任务执行器应该运行的任务有一个无限循环,这就是它停止调度的原因。感谢您的回复。不幸的是,此
fixedRate
在几天后停止。我的用法与@coolscitist-start和stop log以及调用@Async
函数类似。奇怪…没有办法在计划任务执行器上设置超时吗?@Dukethrah我想总是有可能在方法体内部检查超时,不是吗?