Spring MVC控制器调用两次堆栈不同控制器实例是一样的

时间:2014-11-06 19:29:55

标签: spring spring-mvc tomcat

我的弹簧MVC控制器被调用两次。最烦人的事情是,它不是确定性的,有时它有时不会发生。控制器bean的实例是相同的(我打印了引用)但堆栈调用是不同的。我打印过它并制作了差异,唯一的区别是:

<   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);
    }
}

有人知道这可能是什么吗?

2 个答案:

答案 0 :(得分:0)

Chrome正在提出两项请求。

答案 1 :(得分:0)

是肯定的。这发生在Chrome中,但对于Safari,它没问题。

查看我的结果,打印用户代理 incomming:1498879041319,agent = Mozilla / 5.0(Macintosh; Intel Mac OS X 10_12_0)AppleWebKit / 537.36(KHTML,与Gecko一样) Chrome /58.0.3029.110 Safari / 537.36 incomming:1498879041596,agent = Mozilla / 5.0(Macintosh; Intel Mac OS X 10_12_0)AppleWebKit / 537.36(KHTML,与Gecko一样) Chrome /58.0.3029.110 Safari / 537.36 incomming:1498879049068,agent = Mozilla / 5.0(Macintosh; Intel Mac OS X 10_12)AppleWebKit / 602.1.50(KHTML,类似Gecko)版本/ 10.0 Safari /602.1.50