我正在使用 spring boot 框架和 jetty 作为容器编写 spring rest 服务。在控制器中,我使用了这样的可调用对象。
@RequestMapping(value = "/{key}/events", method = RequestMethod.GET)
public Callable<String> getEvents(@PathVariable("key") final String key,
@RequestParam(required = false) final String startAt,
@RequestParam(required = false) final String maxResults) {
return new Callable<String>() {
@Override
public String call() throws Exception {
// here logic that return json string
}
}
}
和我这样写的servlet容器工厂
@Bean
public EmbeddedServletContainerFactory servletContainer(){
JettyEmbeddedServletContainerFactory jetty=new JettyEmbeddedServletContainerFactory();
jetty.addServerCustomizers(new JettyServerCustomizer() {
@Override
public void customize(final Server server) {
// Tweak the connection pool used by Jetty to handle incoming HTTP connections
final QueuedThreadPool threadPool = server.getBean(QueuedThreadPool.class);
threadPool.setMaxThreads(Integer.valueOf(200));
threadPool.setMinThreads(Integer.valueOf(100));
threadPool.setIdleTimeout(Integer.valueOf(100000));
threadPool.setStopTimeout(10000);
}
});
jetty.setPort(4040);
jetty.setContextPath("/mycontextpath");
return jetty;
}
现在我的问题是当我运行应用程序时,
我第一次从浏览器中点击了 url,它没有给出输出(来自码头服务器的服务不可用消息)。
但我再次点击 URL 第二、第三、第四次它给了我输出。
因此,为了实现 Callable 作为控制器,我是否遗漏了一些东西?
我调试代码,发现第一次内部处理仍在进行中,浏览器完成响应...
所以我该怎么做?请建议,
我的主要目标是控制器应该在特定时间接受更多的客户端请求并做出响应。