2014-11-06 64 views
0

我的spring MVC控制器被调用两次。最烦人的是它不是确定性的,有时它会发生一些不是。控制器bean的实例是相同的(我已经打印了引用),但堆栈调用是不同的。我打印了,并提出了差异,唯一的区别是:Spring MVC控制器调用两次堆栈不同控制器实例是一样的

< at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
--- 
> at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 

如此看来,一个是以线310打了个电话,另一种被称为由312似乎当请求需要发生更多的时间(它必须去数据库等)。

我已经使用FF和Chrome进行了测试,并且此请求也是通过浏览器栏进行的GET请求,因此它没有任何前端代码。

该应用程序在Apache Tomcat/7.0.47下运行。

代码示例:

@Controller 
@RequestMapping(value = "/base") 
public class AdyenApiController { 

    @Autowired 
    private AdyenNotificationService service; 

    @RequestMapping(value = "/debug/due", method = RequestMethod.GET) 
    @ResponseBody 
    public ResponseEntity<String> dueScheduler() { 
     try { 
      throw new RuntimeException(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     System.out.println("> " + this); 
     System.out.println("EXECUTING?!"); 
     service.processModifications(); 
     return new ResponseEntity<>("processed dues)", HttpStatus.OK); 
    } 
} 

是否有人有任何想法,这可能是?

+0

你能否粘贴谁le错误和您的控制器代码? – Aeseir 2014-11-06 22:49:22

+0

没有错误我只是为了看到堆栈而发生错误。错误是控制器被调用两次。 – rpvilao 2014-11-06 22:53:02

+0

因此,为了澄清你输入localhost/some_page,它会调用两次映射到“some_page”的相同的“方法?” – Aeseir 2014-11-06 22:54:18

回答

0

这是铬制造两个请求。

0

是的。这发生在Chrome中,但对于Safari来说,这没什么。

见我的结果,打印用户代理 进来的:1498879041319,代理= Mozilla的/ 5.0(Macintosh上;英特尔的Mac OS X 10_12_0)为AppleWebKit/537.36(KHTML,例如Gecko) /58.0.3029.110 Safari浏览器/ 537.36 进来的:1498879041596,代理= Mozilla的/ 5.0(Macintosh上;英特尔的Mac OS X 10_12_0)为AppleWebKit/537.36(KHTML,例如Gecko) /58.0.3029.110 Safari浏览器/ 537.36 进来的:1498879049068,代理= Mozilla的/ 5.0(Macintosh的;英特尔Mac OS X 10_12)AppleWebKit/602.1.50(KHTML,如Gecko)版本/ 10.0 Safari /602.1.50