You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring-MVC动态Cron任务Tomcat关机异常问题求助

Spring MVC动态Cron任务Tomcat关机时无法正常停止

我在Spring MVC中实现了动态Cron任务,用户可通过XHTML页面切换任务状态。任务运行正常,但Tomcat关机时出现异常,无法正常停止,尝试过相关解决方案但问题依旧。环境为JDK 17 + Tomcat 9。

错误信息

02-Feb-2023 14:17:58.960 WARNING [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [MuhurUM] registered the JDBC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
02-Feb-2023 14:17:58.961 WARNING [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [MuhurUM] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.4/java.lang.Object.wait(Native Method)
 java.base@17.0.4/java.lang.Object.wait(Object.java:338)
 java.base@17.0.4/java.util.TimerThread.mainLoop(Timer.java:537)
 java.base@17.0.4/java.util.TimerThread.run(Timer.java:516)
02-Feb-2023 14:17:58.962 WARNING [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [MuhurUM] appears to have started a thread named [pool-3-thread-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.base@17.0.4/jdk.internal.misc.Unsafe.park(Native Method)
 java.base@17.0.4/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
 java.base@17.0.4/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1672)
 java.base@17.0.4/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
 java.base@17.0.4/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
 java.base@17.0.4/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
 java.base@17.0.4/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
 java.base@17.0.4/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
 java.base@17.0.4/java.lang.Thread.run(Thread.java:833)

相关代码

@Service
public class CronUtil {

    @Autowired
    private TaskScheduler taskScheduler;

    public void scheduleATask(Long id, Runnable tasklet, String cronExpression) {
        ScheduledFuture<?> scheduledTask = taskScheduler.schedule(tasklet, new CronTrigger(cronExpression, TimeZone.getTimeZone(TimeZone.getDefault().getID())));
        TestApplication.jobsMap.put(id, scheduledTask);
    }

    public void removeScheduledTask(Long id) {
        ScheduledFuture<?> scheduledTask = TestApplication.jobsMap.get(id);
        if (scheduledTask != null) {
            scheduledTask.cancel(true);
            TestApplication.jobsMap.remove(id);
        }
    }
}

内容的提问来源于stack exchange,提问作者Oytun Canatan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:01:43