Closed niceyou99 closed 1 year ago
It's not that there is no rollback, there is no transaction going on at all to open an xa transaction, this xa transaction looks like it was started by another transaction first Please add seata version number and mysql version number, which service is reporting the error
seata 1.4.2 mysql 5.7 服务2 和 服务3 都报错了 只有服务1没有报错
服务2 扣减余额
2022-10-26 11:30:55.913 [http-nio-18881-exec-5] INFO c.m.e.s.impl.TestAccountServiceImpl:26 - Seata全局事务id=================>172.16.43.1:8091:90392771099869306
2022-10-26 11:30:55.914 [http-nio-18881-exec-5] INFO c.m.e.s.impl.TestAccountServiceImpl:27 - 开始扣款
2022-10-26 11:30:55.914 [http-nio-18881-exec-5] INFO c.m.p.i.CreateByInsertInterceptor:32 - 进入自动设置创建人和修改人拦截器!
2022-10-26 11:30:55.915 [http-nio-18881-exec-5] DEBUG c.m.e.m.m.TestAccountMapper.deduct:181 - ==> Preparing: update lamp_column.account_tbl set money = money - ? where user_id = ?
2022-10-26 11:30:55.917 [http-nio-18881-exec-5] DEBUG c.m.e.m.m.TestAccountMapper.deduct:181 - ==> Parameters: 322(Integer), user202103032042012(String)
2022-10-26 11:30:55.931 [http-nio-18881-exec-5] ERROR c.c.w.handle.GlobalExceptionHandler:85 - Exception异常,请求路由:/account/user202103032042012/322,异常信息:扣款失败,可能是余额不足!
java.lang.RuntimeException: 扣款失败,可能是余额不足!
at com.micro.enterprise.service.impl.TestAccountServiceImpl.deduct(TestAccountServiceImpl.java:31)
at com.micro.enterprise.service.impl.TestAccountServiceImpl$$FastClassBySpringCGLIB$$6e969cd9.invoke(
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:200)
at sun.reflect.GeneratedMethodAccessor447.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
at com.sun.proxy.$Proxy134.update(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:294)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy183.deduct(Unknown Source)
at com.micro.enterprise.service.impl.TestAccountServiceImpl.deduct(TestAccountServiceImpl.java:29)
... 87 common frames omitted
Caused by: java.sql.SQLException: failed to start xa branch 172.16.43.1:8091:90392771099869306 since XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state at io.seata.rm.datasource.xa.ConnectionProxyXA.setAutoCommit(ConnectionProxyXA.java:156) at io.seata.rm.datasource.xa.ExecuteTemplateXA.execute(ExecuteTemplateXA.java:41) at io.seata.rm.datasource.xa.PreparedStatementProxyXA.execute(PreparedStatementProxyXA.java:66) at sun.reflect.GeneratedMethodAccessor202.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59) at com.sun.proxy.$Proxy286.execute(Unknown Source) at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:46) at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at sun.reflect.GeneratedMethodAccessor321.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63) at com.sun.proxy.$Proxy237.update(Unknown Source) at sun.reflect.GeneratedMethodAccessor321.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at com.micro.plugin.interceptor.CreateByInsertInterceptor.intercept(CreateByInsertInterceptor.java:61) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) at com.sun.proxy.$Proxy237.update(Unknown Source) at sun.reflect.GeneratedMethodAccessor321.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at com.micro.plugin.interceptor.SnowIdInsertInterceptor.intercept(SnowIdInsertInterceptor.java:36) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) at com.sun.proxy.$Proxy237.update(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198) ... 97 common frames omitted Caused by: com.mysql.cj.jdbc.MysqlXAException: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state at com.mysql.cj.jdbc.MysqlXAConnection.mapXAExceptionFromSQLException(MysqlXAConnection.java:344) at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:329) at com.mysql.cj.jdbc.MysqlXAConnection.start(MysqlXAConnection.java:290) at io.seata.rm.datasource.xa.ConnectionProxyXA.setAutoCommit(ConnectionProxyXA.java:153) ... 129 common frames omitted Caused by: java.sql.SQLException: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:763) at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648) at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:323) ... 131 common frames omitted
服务3 扣减库存
2022-10-26 11:28:58.307 [http-nio-18883-exec-5] INFO c.m.o.s.impl.TestStorageServiceImpl:26 - Seata全局事务id=================>172.16.43.1:8091:90392771099869297
2022-10-26 11:28:58.308 [http-nio-18883-exec-5] INFO c.m.o.s.impl.TestStorageServiceImpl:27 - 开始扣减库存
2022-10-26 11:28:58.308 [http-nio-18883-exec-5] INFO c.m.p.i.CreateByInsertInterceptor:32 - 进入自动设置创建人和修改人拦截器!
2022-10-26 11:28:58.311 [http-nio-18883-exec-5] DEBUG c.m.o.m.m.TestStorageMapper.deduct:137 - ==> Preparing: update lamp_column.storage_tbl set count
= count
- ? where commodity_code = ?
2022-10-26 11:28:58.312 [http-nio-18883-exec-5] DEBUG c.m.o.m.m.TestStorageMapper.deduct:137 - ==> Parameters: 9(Integer), 100202003032041(String)
2022-10-26 11:28:58.328 [http-nio-18883-exec-5] ERROR c.c.w.handle.GlobalExceptionHandler:85 - Exception异常,请求路由:/storage/100202003032041/9,异常信息:扣减库存失败,可能是库存不足!
java.lang.RuntimeException: 扣减库存失败,可能是库存不足!
at com.micro.operation.service.impl.TestStorageServiceImpl.deduct(TestStorageServiceImpl.java:31)
at com.micro.operation.service.impl.TestStorageServiceImpl$$FastClassBySpringCGLIB$$76cae683.invoke(
count
= count
- ? where commodity_code = ?; uncategorized SQLException; SQL state [null]; error code [0]; failed to start xa branch 172.16.43.1:8091:90392771099869297 since XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state; nested exception is java.sql.SQLException: failed to start xa branch 172.16.43.1:8091:90392771099869297 since XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) at com.sun.proxy.$Proxy126.update(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:288) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:67) at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) at com.sun.proxy.$Proxy189.deduct(Unknown Source) at com.micro.operation.service.impl.TestStorageServiceImpl.deduct(TestStorageServiceImpl.java:29) ... 83 common frames omitted Caused by: java.sql.SQLException: failed to start xa branch 172.16.43.1:8091:90392771099869297 since XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state at io.seata.rm.datasource.xa.ConnectionProxyXA.setAutoCommit(ConnectionProxyXA.java:156) at io.seata.rm.datasource.xa.ExecuteTemplateXA.execute(ExecuteTemplateXA.java:41) at io.seata.rm.datasource.xa.PreparedStatementProxyXA.execute(PreparedStatementProxyXA.java:66) at sun.reflect.GeneratedMethodAccessor200.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59) at com.sun.proxy.$Proxy185.execute(Unknown Source) at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47) at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64) at com.sun.proxy.$Proxy183.update(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at com.micro.plugin.interceptor.CreateByInsertInterceptor.intercept(CreateByInsertInterceptor.java:61) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) at com.sun.proxy.$Proxy183.update(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at com.micro.plugin.interceptor.SnowIdInsertInterceptor.intercept(SnowIdInsertInterceptor.java:36) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) at com.sun.proxy.$Proxy183.update(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ... 90 common frames omitted Caused by: com.mysql.cj.jdbc.MysqlXAException: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state at com.mysql.cj.jdbc.MysqlXAConnection.mapXAExceptionFromSQLException(MysqlXAConnection.java:344) at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:329) at com.mysql.cj.jdbc.MysqlXAConnection.start(MysqlXAConnection.java:290) at io.seata.rm.datasource.xa.ConnectionProxyXA.setAutoCommit(ConnectionProxyXA.java:153) ... 130 common frames omitted Caused by: java.sql.SQLException: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:763) at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648) at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:323) ... 132 common frames omitted
服务1的日志:
Please try to upgrade 1.5.2
You just need to change the seata version number to re-test it, and we'll talk further if there are still problems
我遇到了新的问题 微服务引入依赖1.5.2 版本seata 服务启动的时候报错了 我们服务是多数据源的 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'tccFenceConfig' defined in class path resource [io/seata/spring/boot/autoconfigure/SeataTCCFenceAutoConfiguration.class]: Unsatisfied dependency expressed through method 'tccFenceConfig' parameter 0; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: more than one 'primary' bean found among candidates: [chaoShiDataSource, mallDataSource, dataSource, zjtDataSource]
You don't use tcc, you can exclude the loading of SeataTCCFenceAutoConfiguration Multiple data sources should just expose one data source externally, with multiple data sources built in, using the dynamic data sources exposed externally to switch internally
你这个问题极有可能是多数据源的使用方式不对造成的,多数据源情况下关闭自动代理,并且手动将物理数据源进行new DataSource(datasource)的代理出去给业务使用 Your problem is most likely caused by using multiple data sources in the wrong way, turn off automatic proxying in the case of multiple data sources and manually proxy the physical data source out to the business with a new DataSource(datasource)
建议你学习一下https://github.com/baomidou/dynamic-datasource-spring-boot-starter/blob/master/src/main/java/com/baomidou/dynamic/datasource/creator/AbstractDataSourceCreator.java
It is recommended that you learn what is done in the dynamic-datasource-spring-boot-starter component
好的 非常感谢您的耐心和帮助 排除了那个配置类之后 项目启动了 但是还是和之前一样的报错 会不会也是因为数据源使用不当的问题
服务2 扣减余额的
应该可以确认是多数据源问题,建议你使用dynamic-datasource-spring-boot-starter 现成的动态数据源,或按照我说的那种方式,关闭自动代理,手动代理只代理内部真正操作数据库的datasource,外部的不要进行二次代理,或许你可以将你的demo提交上来,以便问题排查 You should be able to confirm that it's a multiple datasource issue, suggest you use dynamic-datasource-spring-boot-starter off-the-shelf dynamic datasource, or do what I said and turn off automatic proxying and manually proxy only the internal datasource that actually operates the database, no secondary proxying for external ones, maybe you can submit the your demo up for troubleshooting
我先去学习下你说的动态数据源
enterprise.zip 因为是项目代码 数据源配置是其他开发人员配置的 你可以看下配置 是不是这个出了问题 数据源方面我有些无从下手
这个demo无关紧要的东西太多了,我建议你搭一个简单的sample出来,能复现这个问题的 There are so many irrelevant things in this demo, I suggest you build a simple sample out that reproduces the problem
多数据源是自己单独分开写配置的,现在使用了AtomikosDataSource来代理了来管理多数据源的事务
这是demo案例 和服务报错信息: seata-demo.zip
服务1报错信息: 10-27 14:16:14:371 INFO 26900 --- [nio-8082-exec-7] i.seata.tm.api.DefaultGlobalTransaction : Begin new global transaction [172.16.43.1:8091:90392801965107872] 10-27 14:16:14:372 INFO 26900 --- [nio-8082-exec-7] c.i.order.service.impl.OrderServiceImpl : Seata全局事务id=================>172.16.43.1:8091:90392801965107872 10-27 14:16:16:368 DEBUG 26900 --- [nio-8082-exec-7] c.i.order.mapper.OrderMapper.insert01 : ==> Preparing: insert into lamp_column.order_tbl values(null,?,?,?,?) 10-27 14:16:16:369 DEBUG 26900 --- [nio-8082-exec-7] c.i.order.mapper.OrderMapper.insert01 : ==> Parameters: user202103032042012(String), 100202003032041(String), 11(Integer), 100(Integer) 10-27 14:16:16:403 DEBUG 26900 --- [nio-8082-exec-7] c.i.order.mapper.OrderMapper.insert01 : <== Updates: 1 10-27 14:16:17:357 ERROR 26900 --- [nio-8082-exec-7] c.i.order.service.impl.OrderServiceImpl : 下单失败,原因:{"timestamp":"2022-10-27T06:16:17.352+00:00","status":500,"error":"Internal Server Error","message":"","path":"/account/user202103032042012/100"}
feign.FeignException$InternalServerError: [500] during [PUT] to [http://account-service/account/user202103032042012/100] [AccountClient#deduct(String,Integer)]: [{"timestamp":"2022-10-27T06:16:17.352+00:00","status":500,"error":"Internal Server Error","message":"","path":"/account/user202103032042012/100"}]
at feign.FeignException.serverErrorStatus(FeignException.java:231) ~[feign-core-10.10.1.jar:na]
at feign.FeignException.errorStatus(FeignException.java:180) ~[feign-core-10.10.1.jar:na]
at feign.FeignException.errorStatus(FeignException.java:169) ~[feign-core-10.10.1.jar:na]
at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:92) ~[feign-core-10.10.1.jar:na]
at feign.AsyncResponseHandler.handleResponse(AsyncResponseHandler.java:96) ~[feign-core-10.10.1.jar:na]
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:138) ~[feign-core-10.10.1.jar:na]
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:89) ~[feign-core-10.10.1.jar:na]
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100) ~[feign-core-10.10.1.jar:na]
at com.sun.proxy.$Proxy88.deduct(Unknown Source) ~[na:na]
at cn.itcast.order.service.impl.OrderServiceImpl.create(OrderServiceImpl.java:39) ~[classes/:na]
at cn.itcast.order.service.impl.OrderServiceImpl$$FastClassBySpringCGLIB$$92afc7bb.invoke(
10-27 14:16:17:380 INFO 26900 --- [nio-8082-exec-7] i.seata.tm.api.DefaultGlobalTransaction : Suspending current transaction, xid = 172.16.43.1:8091:90392801965107872 10-27 14:16:17:381 INFO 26900 --- [nio-8082-exec-7] i.seata.tm.api.DefaultGlobalTransaction : [172.16.43.1:8091:90392801965107872] rollback status: RollbackRetrying 10-27 14:16:17:381 WARN 26900 --- [nio-8082-exec-7] i.s.tm.api.DefaultFailureHandlerImpl : Retrying to rollback transaction[172.16.43.1:8091:90392801965107872] 10-27 14:16:17:382 ERROR 26900 --- [nio-8082-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: {"timestamp":"2022-10-27T06:16:17.352+00:00","status":500,"error":"Internal Server Error","message":"","path":"/account/user202103032042012/100"}] with root cause
feign.FeignException$InternalServerError: [500] during [PUT] to [http://account-service/account/user202103032042012/100] [AccountClient#deduct(String,Integer)]: [{"timestamp":"2022-10-27T06:16:17.352+00:00","status":500,"error":"Internal Server Error","message":"","path":"/account/user202103032042012/100"}]
at feign.FeignException.serverErrorStatus(FeignException.java:231) ~[feign-core-10.10.1.jar:na]
at feign.FeignException.errorStatus(FeignException.java:180) ~[feign-core-10.10.1.jar:na]
at feign.FeignException.errorStatus(FeignException.java:169) ~[feign-core-10.10.1.jar:na]
at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:92) ~[feign-core-10.10.1.jar:na]
at feign.AsyncResponseHandler.handleResponse(AsyncResponseHandler.java:96) ~[feign-core-10.10.1.jar:na]
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:138) ~[feign-core-10.10.1.jar:na]
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:89) ~[feign-core-10.10.1.jar:na]
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100) ~[feign-core-10.10.1.jar:na]
at com.sun.proxy.$Proxy88.deduct(Unknown Source) ~[na:na]
at cn.itcast.order.service.impl.OrderServiceImpl.create(OrderServiceImpl.java:39) ~[classes/:na]
at cn.itcast.order.service.impl.OrderServiceImpl$$FastClassBySpringCGLIB$$92afc7bb.invoke(
10-27 14:16:27:623 INFO 26900 --- [actionRetry_1_1] i.s.tm.api.DefaultFailureHandlerImpl : transaction [172.16.43.1:8091:90392801965107872] current status is [RollbackRetrying] 10-27 14:18:15:138 INFO 26900 --- [ch_RMROLE_1_3_8] i.s.c.r.p.c.RmBranchRollbackProcessor : rm handle branch rollback process:xid=172.16.43.1:8091:90392801965107872,branchId=90392801965107876,branchType=XA,resourceId=jdbc:mysql://localhost:3306/lamp_column,applicationData=null 10-27 14:18:15:139 INFO 26900 --- [ch_RMROLE_1_3_8] io.seata.rm.AbstractRMHandler : Branch Rollbacking: 172.16.43.1:8091:90392801965107872 90392801965107876 jdbc:mysql://localhost:3306/lamp_column 10-27 14:18:15:151 INFO 26900 --- [ch_RMROLE_1_3_8] i.s.rm.datasource.xa.ResourceManagerXA : 172.16.43.1:8091:90392801965107872-90392801965107876 was rollbacked 10-27 14:18:15:152 INFO 26900 --- [ch_RMROLE_1_3_8] io.seata.rm.AbstractRMHandler : Branch Rollbacked result: PhaseTwo_Rollbacked
服务2报错信息: 10-27 14:52:45:477 INFO 11040 --- [nio-8083-exec-7] c.i.a.service.impl.AccountServiceImpl : Seata全局事务id=================>172.16.43.1:8091:90392801965108118 10-27 14:52:45:478 INFO 11040 --- [nio-8083-exec-7] c.i.a.service.impl.AccountServiceImpl : 开始扣款 10-27 14:52:45:486 DEBUG 11040 --- [nio-8083-exec-7] c.i.account.mapper.AccountMapper.deduct : ==> Preparing: update account_tbl set money = money - 100 where user_id = ? 10-27 14:52:45:487 DEBUG 11040 --- [nio-8083-exec-7] c.i.account.mapper.AccountMapper.deduct : ==> Parameters: user202103032042012(String) 10-27 14:52:45:503 WARN 11040 --- [nio-8083-exec-7] c.atomikos.jdbc.AbstractConnectionProxy : Forcing close of pending statement: com.mysql.cj.jdbc.ClientPreparedStatement: update account_tbl set money = money - 100 where user_id = NOT SPECIFIED 10-27 14:52:45:503 WARN 11040 --- [nio-8083-exec-7] c.a.c.seata.web.SeataHandlerInterceptor : xid in change during RPC from 172.16.43.1:8091:90392801965108118 to null 10-27 14:52:45:505 ERROR 11040 --- [nio-8083-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: 扣款失败,可能是余额不足!] with root cause
java.sql.SQLException: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:763) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:323) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at com.mysql.cj.jdbc.MysqlXAConnection.start(MysqlXAConnection.java:290) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at io.seata.rm.datasource.xa.ConnectionProxyXA.start(ConnectionProxyXA.java:261) ~[seata-all-1.5.2.jar:1.5.2]
at io.seata.rm.datasource.xa.ConnectionProxyXA.setAutoCommit(ConnectionProxyXA.java:177) ~[seata-all-1.5.2.jar:1.5.2]
at io.seata.rm.datasource.xa.ExecuteTemplateXA.execute(ExecuteTemplateXA.java:41) ~[seata-all-1.5.2.jar:1.5.2]
at io.seata.rm.datasource.xa.PreparedStatementProxyXA.execute(PreparedStatementProxyXA.java:66) ~[seata-all-1.5.2.jar:1.5.2]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_211]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_211]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_211]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_211]
at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59) ~[mybatis-3.5.7.jar:3.5.7]
at com.sun.proxy.$Proxy106.execute(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.7.jar:3.5.7]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_211]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_211]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_211]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_211]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64) ~[mybatis-3.5.7.jar:3.5.7]
at com.sun.proxy.$Proxy103.update(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194) ~[mybatis-3.5.7.jar:3.5.7]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_211]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_211]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_211]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_211]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ~[mybatis-spring-2.0.6.jar:2.0.6]
at com.sun.proxy.$Proxy83.update(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:288) ~[mybatis-spring-2.0.6.jar:2.0.6]
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:67) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) ~[mybatis-3.5.7.jar:3.5.7]
at com.sun.proxy.$Proxy84.deduct(Unknown Source) ~[na:na]
at cn.itcast.account.service.impl.AccountServiceImpl.deduct(AccountServiceImpl.java:27) ~[classes/:na]
at cn.itcast.account.service.impl.AccountServiceImpl$$FastClassBySpringCGLIB$$74be219b.invoke(
10-27 14:52:45:509 WARN 11040 --- [nio-8083-exec-7] c.a.c.seata.web.SeataHandlerInterceptor : xid in change during RPC from 172.16.43.1:8091:90392801965108118 to null 10-27 14:52:45:527 INFO 11040 --- [ch_RMROLE_1_8_8] i.s.c.r.p.c.RmBranchRollbackProcessor : rm handle branch rollback process:xid=172.16.43.1:8091:90392801965108118,branchId=90392801965108122,branchType=XA,resourceId=jdbc:mysql://localhost:3306/lamp_column,applicationData=null 10-27 14:52:45:527 INFO 11040 --- [ch_RMROLE_1_8_8] io.seata.rm.AbstractRMHandler : Branch Rollbacking: 172.16.43.1:8091:90392801965108118 90392801965108122 jdbc:mysql://localhost:3306/lamp_column 10-27 14:52:45:529 INFO 11040 --- [ch_RMROLE_1_8_8] io.seata.rm.AbstractRMHandler : Branch Rollbacked result: PhaseTwo_RollbackFailed_XAER_NOTA_Retryable 10-27 14:52:46:133 INFO 11040 --- [ch_RMROLE_1_1_8] i.s.c.r.p.c.RmBranchRollbackProcessor : rm handle branch rollback process:xid=172.16.43.1:8091:90392801965108118,branchId=90392801965108122,branchType=XA,resourceId=jdbc:mysql://localhost:3306/lamp_column,applicationData=null 10-27 14:52:46:133 INFO 11040 --- [ch_RMROLE_1_1_8] io.seata.rm.AbstractRMHandler : Branch Rollbacking: 172.16.43.1:8091:90392801965108118 90392801965108122 jdbc:mysql://localhost:3306/lamp_column 10-27 14:52:46:134 INFO 11040 --- [ch_RMROLE_1_1_8] io.seata.rm.AbstractRMHandler : Branch Rollbacked result:
服务3没有日志信息
还请麻烦在帮我看下
use dynamic-datasource-spring-boot-starter
use dynamic-datasource-spring-boot-starter
ok thanks
Caused by: org.apache.ibatis.exceptions.PersistenceException:
Error updating database. Cause: java.sql.SQLException: failed to start xa branch 172.16.43.1:8091:90392771099869289 since XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
The error may involve com.micro.enterprise.mapper.micro.TestAccountMapper.deduct-Inline
The error occurred while setting parameters
SQL: update lamp_column.account_tbl set money = money - ? where user_id = ?
Cause: java.sql.SQLException: failed to start xa branch 172.16.43.1:8091:90392771099869289 since XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
Caused by: java.sql.SQLException: failed to start xa branch 172.16.43.1:8091:90392771099869289 since XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state at io.seata.rm.datasource.xa.ConnectionProxyXA.setAutoCommit(ConnectionProxyXA.java:156) at io.seata.rm.datasource.xa.ExecuteTemplateXA.execute(ExecuteTemplateXA.java:41) at io.seata.rm.datasource.xa.PreparedStatementProxyXA.execute(PreparedStatementProxyXA.java:66) at sun.reflect.GeneratedMethodAccessor202.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59) at com.sun.proxy.$Proxy286.execute(Unknown Source) at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:46) at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at sun.reflect.GeneratedMethodAccessor321.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63) at com.sun.proxy.$Proxy237.update(Unknown Source) at sun.reflect.GeneratedMethodAccessor321.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at com.micro.plugin.interceptor.CreateByInsertInterceptor.intercept(CreateByInsertInterceptor.java:61) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) at com.sun.proxy.$Proxy237.update(Unknown Source) at sun.reflect.GeneratedMethodAccessor321.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at com.micro.plugin.interceptor.SnowIdInsertInterceptor.intercept(SnowIdInsertInterceptor.java:36) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) at com.sun.proxy.$Proxy237.update(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198) ... 98 common frames omitted Caused by: com.mysql.cj.jdbc.MysqlXAException: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state at com.mysql.cj.jdbc.MysqlXAConnection.mapXAExceptionFromSQLException(MysqlXAConnection.java:344) at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:329) at com.mysql.cj.jdbc.MysqlXAConnection.start(MysqlXAConnection.java:290) at io.seata.rm.datasource.xa.ConnectionProxyXA.setAutoCommit(ConnectionProxyXA.java:153) ... 130 common frames omitted Caused by: java.sql.SQLException: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:763) at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648) at com.mysql.cj.jdbc.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:323) ... 132 common frames omitted