大家好,最近做一个http服务,通过json接收服务传上来的数据。
因为应用场景很简单,就直接用了dwz的现成架构,springmvc+mybatis。
以前也用过这个架构,觉得还算可以,没发现什么问题。
但是这次使用中出现奇怪的问题,我先文字描述:
不知道在什么情况下,在controller中调用service实现去执行持久化操作,就会卡顿。
用卡顿来形容不知道是否合理,也可以说挂起,或者什么,总之,通过http请求到controller再调用service实现进行数据库查询时,不会马上执行service实现类的方法,我debug发现,哪怕在实现类中第一行system.out.print(1);都不会马上执行,而是过几秒、甚至几十秒、1分钟才会继续执行并正常返回。二在卡顿的时候后台打印的内容问下图
重启服务后,不管如何调用任意controller的任意service查询任意表,都没问题,但在重启过后使用中不知道什么情况下,就会进入卡顿状态,而且一旦开始卡顿,每次请求都会卡顿。不知道是什么原因造成的,与环境有关?事物有关?数据库等?请大神们指点一二,感激不尽~!

解决方案 »

  1.   

    补充一下,一旦进入问题状态,假如我同一个http请求三次,那么会输出三次上图中倒数两行日志。而在等待时间过后,三个service实现类则同时执行;假如我这个请求是insert一个user,service中查询库表来验证用户名不得重复,但出现以上情况时,则三条相同的user会在卡顿后同时insert成功,而不经过任何验证,也就是说,三条记录的insert是同时进行
      

  2.   

    前面有个selectProvince方法 因事务隔离级别是required会阻塞当前线程操作
      

  3.   

    感谢,最开始我认为是事物的问题,之前设置的是PROPAGATION_REQUIRES_NEW,挂起。
    但后面改成了PROPAGATION_REQUIRED新建事物,这样还是不正确,请指点。
      

  4.   

    感谢,最开始我认为是事物的问题,之前设置的是PROPAGATION_REQUIRES_NEW,挂起。
    但后面改成了PROPAGATION_REQUIRED新建事物,这样还是不正确,请指点。
    你把selectProvince先去掉试试
      

  5.   

    感谢,最开始我认为是事物的问题,之前设置的是PROPAGATION_REQUIRES_NEW,挂起。
    但后面改成了PROPAGATION_REQUIRED新建事物,这样还是不正确,请指点。
    你把selectProvince先去掉试试
    不是这一个方法的问题,只要一出现卡顿,访问哪个service都一样,这个是最基础的login
      

  6.   

    感谢,最开始我认为是事物的问题,之前设置的是PROPAGATION_REQUIRES_NEW,挂起。
    但后面改成了PROPAGATION_REQUIRED新建事物,这样还是不正确,请指点。
    你把selectProvince先去掉试试
    不是这一个方法的问题,只要一出现卡顿,访问哪个service都一样,这个是最基础的login

    你不是debug过吗?进controller会卡吗?
      

  7.   

    进controller不会卡,卡在controller中第一次调用service实现的地方。不管他是哪个实现类,只要是这个controller第一个执行的service实现就卡住,并且,service实现方法体不执行,哪怕是一句输出也不会执行,直到等待结束。
      

  8.   

    你是说,刚启动时是正常的,运行一阶段后才会出现卡顿,而且看你说连system。out。printl都会卡顿,那么久只有一种原因了,是jvm的问题,另外刚启动的时候好好的,用一阶段才会这样,应该是资源被耗光,没被回收的问题,你看下你那个什么dwz的框架吧;肯定是这边出现了问题,造成资源一直被劫持了得不到释放;
      

  9.   

    进controller不会卡,卡在controller中第一次调用service实现的地方。不管他是哪个实现类,只要是这个controller第一个执行的service实现就卡住,并且,service实现方法体不执行,哪怕是一句输出也不会执行,直到等待结束。
    你把Transactional注解去掉看看还卡吗?
      

  10.   

    进controller不会卡,卡在controller中第一次调用service实现的地方。不管他是哪个实现类,只要是这个controller第一个执行的service实现就卡住,并且,service实现方法体不执行,哪怕是一句输出也不会执行,直到等待结束。
    你把Transactional注解去掉看看还卡吗?
    回滚机制跟这个应该没有关系吧?一直出差中,刚回来又要面对这个问题