如果請求正在處理超過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