seata mybatis出现org.apache.ibatis.binding.BindingException: Invalid bound statement not

重点注意下面红色的部分,将 SqlSessionFactoryBean 改为 MybatisSqlSessionFactoryBean 即可

package com.ltfx;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import io.seata.rm.datasource.DataSourceProxy;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.transaction.SpringManagedTransactionFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

/**
 * 数据源代理
 * @author wangzhongxiang
 */
@Configuration
public class DataSourceConfiguration {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }

    @Primary
    @Bean("dataSource")
    public DataSourceProxy dataSource(DataSource druidDataSource){
        return new DataSourceProxy(druidDataSource);
    }

    @Bean
    public MybatisSqlSessionFactoryBean sqlSessionFactory(DataSourceProxy dataSourceProxy)throws Exception{
        MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSourceProxy);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath*:mapper/**/**Mapper.xml"));
        sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
        return sqlSessionFactoryBean;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题属于技术问题,我可以回答。这个异常是由于 Seata 分布式事务框架中的 RPC 调用超时引起的。可能是网络延迟或者服务端处理时间过长导致的。可以通过调整 Seata 的配置或者优化网络环境来解决这个问题。 ### 回答2: io.seata.core.exception.TmTransactionException: RPC timeout是Seata分布式事务框架中的一个异常情况。当Seata中的事务管理器(TransactionManager)在与其他组件通信时发生超时,就会抛出这个异常。 Seata是一个开源的分布式事务框架,用于解决分布式系统中的事务一致性问题。它由全局事务管理器(GlobalTransactionManager)、分支事务管理器(BranchTransactionManager)以及事务参与者(TransactionParticipant)等不同组件构成。 在进行分布式事务时,Seata的全局事务管理器与各个分支事务管理器需要通过RPC(远程过程调用)进行通信。如果在与其他组件通信的过程中发生超时,就会抛出RPC timeout异常。 出现这个异常可能有以下几种情况: 1. 分支事务管理器无法连接到全局事务管理器。可能是由于网络问题、配置错误等原因导致的连接超时。 2. Seata全局事务管理器处理请求的时间超过了设置的超时时间。可能是因为全局事务管理器的负载过高,无法及时处理请求。 解决这个异常的办法有: 1. 检查网络连接是否正常,确保分支事务管理器可以与全局事务管理器正常通信。 2. 调整Seata的配置,增加超时时间,以便应对处理请求的时间较长的情况。 3. 检查Seata全局事务管理器的负载情况,如有需要,增加其能力以确保及时处理请求。 总而言之,io.seata.core.exception.TmTransactionException: RPC timeout异常是Seata分布式事务框架中的一种异常情况,可能由于网络问题、配置错误、负载过高等原因导致。通过检查网络连接、调整超时时间以及增加全局事务管理器的能力,可以解决这个异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值