我正在使用spring boot framework和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 conatiner工厂
@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它没有给出输出(来自jetty服务器的服务不可用消息)。
但我又一次点击了URL,第三次,第四次给了我输出。
因此,为了实现Callable作为控制器,我是否遗漏了什么?
我调试代码并发现第一次内部处理仍在继续,浏览器完成响应......
所以我做什么?请建议,
我的主要目标是控制器应该在特定时间接受更多客户请求并做出响应。