冲突原因:

不加skywalking的时候,JPA接口的代理方式为JDK动态代理,加入skywalking后,JPA的接口代理方式变成了CGLIB。如下图所示为判断JPA接口代理方式的逻辑:

skywalking和JPA冲突问题解决

之所以加入skywalking后,代理方式变成CGLIB的原因是,skywalking对hasNoUserSuppliedProxyInterfaces方法进来了重新定义。代理的逻辑代码如下图,第二张图是具体的重定义实现。

skywalking和JPA冲突问题解决

skywalking和JPA冲突问题解决

解决方式:

我的解决方式就是在afterMethod中增加判断,如果是JPA的接口则返回false,如下图所示

skywalking和JPA冲突问题解决

重新打包,然后将jar包放到skywalking下的plugins目录下即可。

附上打包后的下载链接:

相关文章: