我使用Spring Integration
来管理服务器端的套接字连接。如果服务器(tomcat)关闭,我如何确保任何活动的套接字连接被正确终止?
<ip:tcp-inbound-gateway id="server"
connection-factory="fac"
request-channel="chan"
error-channel="errorChan" />
有好心的听众吗?或任何可以防止服务器关闭的拦截器,例如,如果在关闭期间有任何打开的套接字,则最多60秒;但同时关闭套接字,在关机期间不接受任何连接?
使用侦听器解决了这个问题,并在有任何飞行消息(actives
,见下文)时,使用特定超时关闭套接字门。
@Component
public class MyListener implements ApplicationListener<ContextClosedEvent> {
@Autowired
private TcpInboundGateway gate;
@Autowired
private IntegrationMBeanExporter bean;
@Override
public void onApplicationEvent(ContextClosedEvent e) {
//return
int actives = gate.beforeShutdown();
if (actives == 0) {
bean.stopActiveComponents(true, 0);
} else {
bean.stopActiveComponents(false, timeout);
}
}
}
我目前有一个简单的即时消息程序,它利用Java的Socket和ServerSocket类。它按预期运行,但当我尝试关闭连接时,它没有使用4路握手TCP断开来关闭连接。相反,它使用RST数据包突然关闭连接。 关闭连接的方法是从客户端向服务器发送一个字符串,服务器将把它识别为关闭连接的命令。然后,我在服务器上使用方法,在客户端上使用方法。 使用这些类正确关闭TCP连接的正确方式和/或事件顺序是什么?
我正在尝试使用Springboot反应式webclient进行HTTP调用。远程服务器错误导致连接关闭。 请查找以下使用Webclient进行rest调用的代码。 Webclient创建的代码: 第一次通话后,我收到以下日志: 当我在一段时间后(比如10分钟)拨打电话时,连接将变为非活动状态。我正在获取以下日志: 我发现连接没有正确返回到池。配置中是否缺少任何内容?我是否已正确关闭连接?我想这应该
我正在使用HikariDataSource连接到MariaDB数据库。以下类返回一个。 这是执行select查询的方法。该类还包含一个close方法 try with块自动关闭对象,但如何关闭连接池?例如,我应该在数据库操作之后调用close方法吗 当我不调用方法时,我看不到任何关于关机启动的控制台输出。这是关闭和连接池的正确方法吗?
提前致谢
我正在学习Spring Core认证,在提供的学习材料中,我对这个问题有一些疑问: 关闭应用程序上下文的首选方法是什么? 我知道如果我有这样的东西: 通过在上下文对象上使用close()方法,ApplicationContext被关闭,应用程序被销毁。 但我认为这不是我必须做的最好的方式。 阅读官方留档,我发现我也可以这样做: 在JVM中注册一个关闭挂钩,因此JVM将在JVM退出之前触发Sprin