先说结论:你try-catch了抛出的异常,抛出异常前或后有同事务sql执行,导致抛出异常了代码还正常走完了,走完后事务要执行提交操作时,就会抛出这个rollback-only的异常了
原因分析:比如a服务调用b服务,a将事务传递给了b,b执行过程中抛出异常,然后被a捕获或者b自己捕获了,但是这个时候因为有异常抛出导致b事务被标记了回滚,但是异常已经被捕获了,导致a不知道执行异常了,还在正常完成逻辑处理,当a执行完后,事务要提交了,这个时候去数据库提交事务,被数据库告知,你这个事务已经被标记为回滚了不能提交了,然后a把这个Transaction rolled back because it has been marked as rollback-only异常抛出来,然后就被你发现了