我的弹簧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);
}
}
有人知道这可能是什么吗?
答案 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