Spark Java Core服务器端连接超时默认值及自定义配置问询
Spark Java (com.sparkjava) 连接超时配置说明
默认连接空闲超时
Spark Java 2.9.4版本基于Jetty作为嵌入式Web服务器,默认的连接空闲超时为300000毫秒(5分钟),这是Jetty服务器的默认配置值。
为什么修改线程池idleTimeout无效
你尝试修改的threadPool的idleTimeout是用于控制线程池中空闲线程的回收时间,和客户端与服务器之间的连接空闲超时是完全不同的配置项,因此该设置不会影响连接超时行为。
修改连接空闲超时的方法
由于Spark Java底层依赖Jetty,需要通过配置Jetty的ServerConnector来修改连接空闲超时,以下是两种可行方案:
方案1:启动Spark后修改现有Jetty服务器的Connector配置
import spark.Spark; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; public class SparkTimeoutSetup { public static void main(String[] args) { // 初始化Spark端口 Spark.port(4567); // 获取底层Jetty服务器实例 Server jettyServer = (Server) Spark.embeddedServer().getServer(); // 遍历所有Connector,设置空闲超时(示例设置为30秒,即30000毫秒) for (org.eclipse.jetty.server.Connector connector : jettyServer.getConnectors()) { if (connector instanceof ServerConnector) { ((ServerConnector) connector).setIdleTimeout(30000); } } // 定义业务路由 Spark.get("/test", (req, res) -> "Success"); } }
方案2:自定义Jetty服务器并交由Spark托管
import spark.Spark; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import spark.embeddedserver.jetty.JettyServer; public class CustomJettySetup { public static void main(String[] args) { // 创建自定义Jetty服务器 Server customJettyServer = new Server(); ServerConnector connector = new ServerConnector(customJettyServer); // 设置端口和连接空闲超时 connector.setPort(4567); connector.setIdleTimeout(30000); customJettyServer.addConnector(connector); // 让Spark使用自定义的Jetty服务器 Spark.embeddedServer(new JettyServer(customJettyServer)); // 定义业务路由 Spark.get("/test", (req, res) -> "Success"); // 启动Spark Spark.init(); } }
以上两种方式都能有效修改连接空闲超时,确保客户端超时后服务器不再处理该连接的请求。
内容的提问来源于stack exchange,提问作者Wahid Abdullah
相关产品推荐
相关产品推荐

