如果请求正在处理超过3秒钟,我希望我的Spring Boot应用程序使用嵌入式Tomcat重置连接。但是我无法做到这一点。我的最后一个代码片段是:如何配置Spring Boot嵌入式Tomcat连接超时?
@SpringBootApplication
@ComponentScan(basePackages = {"."})
@Controller
public class ExternalServerApplication {
public static void main(String[] args) {
SpringApplication.run(ExternalServerApplication.class, args);
}
@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.addConnectorCustomizers(
connector -> {
AbstractProtocol protocol = (AbstractProtocol) connector.getProtocolHandler();
protocol.setConnectionTimeout(1);
protocol.setKeepAliveTimeout(1);
protocol.setSoTimeout(1);
protocol.setPort(8012);
protocol.setMaxThreads(10);
});
return factory;
}
@RequestMapping("/request")
@ResponseBody
public String request() throws InterruptedException {
for (int i = 0; i < 50; i++) {
Thread.sleep(100);
}
return "OK";
}
}
但它也不起作用。
localhost:8012/requests
的请求持续5秒钟并返回“OK”,但它应该被重置。
任何想法?
您是否试过在application.properties中指定server.connection-timeout = 3000? 编辑:另一方面,你写处理请求超时,而在我看来server.connection超时是别的东西(从文档引述:“这个连接器接受连接后,等待的毫秒数要显示的URI行。“) – patrykos91
查看该线程:http:// stackoverflow。com/questions/7145131/tomcat-request-timeout 另一个可以解决你的问题的方法是用Netflix Zuul :) – patrykos91