Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring 4@计划停止工作_Java_Spring_Scheduled Tasks_Spring Scheduled - Fatal编程技术网

Java Spring 4@计划停止工作

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

我正在使用@Scheduled annotation运行cron作业。调度工作一段时间,然后停止工作。 我将给出我的代码的简化片段:

这是调度程序:

//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我想总是有可能在方法体内部检查超时,不是吗?