gpt4 book ai didi

java - Spring MVC WebApp : @schedule: java-sdk-http-connection-reaper : Failed to Stop

转载 作者:IT老高 更新时间:2023-10-28 13:53:42 25 4
gpt4 key购买 nike

我有一个 Web 应用程序(使用 Spring 3.1),它使用 @Scheduled Annotation 定期执行工作任务(计划延迟)。工作任务打开与 AWS DynamoDb 的连接并执行一些数据库读取/更新。当我停止 webapp(来自 Tomcat 管理器)时,我在 catalina.out 中收到此消息:

“严重:Web 应用程序 [] 似乎已经启动了一个名为 [java-sdk-http-connection-reaper] 的线程,但未能阻止它。这很可能会造成内存泄漏。”

我感觉这与我的计划任务在 Tomcat 停止后仍在运行有关。

@Service
public class TaskScheduler implements ApplicationListener<ContextClosedEvent>{

@Autowired
private WorkerTask workerTask;

AmazonDynamoDBClient myDbConn = null;

private TaskScheduler() {
myDbConn = new AWSConnector("aws.properties").getDynamoConnection();
}

/*
* Will be repeatedly called, 10 seconds after the finish of the previous
* invocation.
*/
@Scheduled(fixedDelay=100000)
public void process() {
System.out.println("Scheduling worker task");
//worker task does some db read/writes
Future<String> status = workerTask.work(myDbConn);
if (status.isDone()) {
System.out.println("Completed Task");
return;
}

}

@Override
public void onApplicationEvent(ContextClosedEvent arg0) {
if(event instanceof ContextClosedEvent) {
// TODO Auto-generated method stub
if(myDbConn != null) {
this.myDbConn.shutdown();
}
}

}

调度程序-servlet.xml:

<task:annotation-driven scheduler="taskScheduler"/>
<task:scheduler id="taskScheduler" pool-size="2"/>
......
<bean id="TaskScheduler" class="com.sample.TaskScheduler"/>

我这样做正确吗? a) 我没有明确启动 TaskScheduler。所以我假设 Spring 负责启动这项服务。 'this.myDbConn.shutdown()' 被调用。尽管如此,我还是得到了错误。我正在使用 Spring MVC。

最佳答案

这可能是由于 AWS 库在后台启动了一个名为 com.amazonaws.http.IdleConnectionReaper 的线程

你可以通过实现一个 ServletContextListener 在关机时关闭它来关闭它

public class YourListener implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent contextEvent) {

}

@Override
public void contextDestroyed(ServletContextEvent contextEvent) {

try {
com.amazonaws.http.IdleConnectionReaper.shutdown();
} catch (Throwable t) {
// log the error
}
}
}

并将其添加到您的 web.xml

<listener>
<listener-class>
your.package.YourListener
</listener-class>
</listener>

关于java - Spring MVC WebApp : @schedule: java-sdk-http-connection-reaper : Failed to Stop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18069042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com