Java 正在随机执行Spring启动计划程序,而不是根据fixedDelay执行

Java 正在随机执行Spring启动计划程序,而不是根据fixedDelay执行,java,spring,spring-boot,Java,Spring,Spring Boot,我最近从@Scheduled(cron=“”)切换到@Scheduled(fixedDelay=),因为在应用程序运行了几个小时后,计划任务停止执行,直到应用程序重新启动。 现在我有这样的东西: @SpringBootApplication(scanBasePackages = {"pl.corpnet.bst"}) @ComponentScan @EnableScheduling @EnableJpaAuditing public class AiostApplication { p

我最近从
@Scheduled(cron=“”)
切换到
@Scheduled(fixedDelay=)
,因为在应用程序运行了几个小时后,计划任务停止执行,直到应用程序重新启动。 现在我有这样的东西:

@SpringBootApplication(scanBasePackages = {"pl.corpnet.bst"})
@ComponentScan
@EnableScheduling
@EnableJpaAuditing
public class AiostApplication {

    public static void main(String[] args) throws JSONException {

        SpringApplication.run(AiostApplication.class, args);

    }


}
以及我希望每5分钟执行一次的计划方法(逻辑只需将GET请求发送到
OpenStackAPI
,并将结果加载到
DB

@计划(固定延迟=300000)
public void reportCurrentTime()引发JSONException、ParseException、UnknownHostException{
设置ts=Thread.getAllStackTraces().keySet();
log.info(“正在运行的线程{}”,ts.size());
listapi=iaasaprepository.findAll();
…逻辑在这里
}
我猜它是由线程锁和更多的调查和放置造成的

        Set<Thread> ts = Thread.getAllStackTraces().keySet();
        for (Thread t : ts) {
            log.info(t.getName()+ " "+ t.getState());
        } 
Set ts=Thread.getAllStackTraces().keySet();
用于(螺纹t:ts){
log.info(t.getName()+“”+t.getState());
} 
我可以看到多个线程(在启动应用程序后总共有27个线程)
https-jsse-nio-8443-exec-8处于等待状态


有谁能给我一个提示,这是一种正确的工作方式,还是我对某些东西配置错误?

使用
fixedDelay
。如果希望它每5分钟运行一次,则应使用
fixedRate
,它在方法开始运行后立即开始计数,因此它总是每5分钟运行一次。如果最后一次执行尚未完成,Spring将创建另一个线程以再次运行该任务。

是否仍有对特定任务设置超时的方法?是的,您应该查看@Async注释:
        Set<Thread> ts = Thread.getAllStackTraces().keySet();
        for (Thread t : ts) {
            log.info(t.getName()+ " "+ t.getState());
        }