`
lixiaoxin
  • 浏览: 18366 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

mybaits 数据源设置defaultAutoCommit=false 事务依然提交

 
阅读更多

最近在验证 defalutAutoCommit 事务提交的时候出现了一个问题 让我百思不得其解

一般来说把数据源属性设置成defalutAutoCommit=false 事务不会自动提交,也就是说在没有使用spring的时候新增一条数据是不会自动提交的到数据库的,但是事实上是不管defalutAutoCommit=false还是=true 在数据依然可以看到有新增的记录.....

打开debug日志....

logging:
  level:
    com: debug
    org: debug

日志截取如下:

org.mybatis.spring.SqlSessionUtils       : Creating a new SqlSession
2020-03-22 11:39:12.627 DEBUG 2248 --- [nio-8888-exec-4] org.mybatis.spring.SqlSessionUtils       : SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f1802b5] was not registered for synchronization because synchronization is not active
2020-03-22 11:39:13.571 DEBUG 2248 --- [nio-8888-exec-4] o.s.jdbc.datasource.DataSourceUtils      : Fetching JDBC Connection from DataSource
2020-03-22 11:39:13.571 DEBUG 2248 --- [nio-8888-exec-4] o.m.s.t.SpringManagedTransaction         : JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6f83eb84] will not be managed by Spring
2020-03-22 11:39:13.571 DEBUG 2248 --- [nio-8888-exec-4] c.c.f.d.d.f.m.d.TestOqMapper.createUser  : ==>  Preparing: insert into fic_user_test xxx,xxx) values (?,?);
2020-03-22 11:39:13.572 DEBUG 2248 --- [nio-8888-exec-4] c.c.f.d.d.f.m.d.TestOqMapper.createUser  : ==> Parameters: xxxx(String), xxxx(String)
2020-03-22 11:39:13.577 DEBUG 2248 --- [nio-8888-exec-4] c.c.f.d.d.f.m.d.TestOqMapper.createUser  : <==    Updates: 1
2020-03-22 11:39:13.578 DEBUG 2248 --- [nio-8888-exec-4] o.m.s.t.SpringManagedTransaction         : Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6f83eb84]
2020-03-22 11:39:13.581 DEBUG 2248 --- [nio-8888-exec-4] org.mybatis.spring.SqlSessionUtils       : Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f1802b5]

 

看到红色的那行:o.m.s.t.SpringManagedTransaction         : Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6f83eb84]

打开SpringManagedTransaction 这个类

 

private void openConnection() throws SQLException {
    this.connection = DataSourceUtils.getConnection(this.dataSource);
    this.autoCommit = this.connection.getAutoCommit();
    this.isConnectionTransactional = DataSourceUtils.isConnectionTransactional(this.connection, this.dataSource);
    LOGGER.debug(() -> {
        return "JDBC Connection [" + this.connection + "] will" + (this.isConnectionTransactional ? " " : " not ") + "be managed by Spring";
    });
}

public void commit() throws SQLException {
    if (this.connection != null && !this.isConnectionTransactional && !this.autoCommit) {
        LOGGER.debug(() -> {
            return "Committing JDBC Connection [" + this.connection + "]";
        });
        this.connection.commit();
    }

}

 

 虽然 :will not be managed by Spring

但是:在满足条件

if (this.connection != null && !this.isConnectionTransactional && !this.autoCommit)
的时候会执行
this.connection.commit()

 

也就是说在没有使用spring的事务管理的时候spring会自动的执行commit()

 

暂时解惑,至于SpringManagedTransaction  类的原理还有待了解

 

 

 

分享到:
评论

相关推荐

    Mybaits-plus优雅的实现多数据源及分表

    1. 事务管理:多数据源环境下,事务的处理会变得复杂,需要确保在跨数据源的操作中,事务的一致性和隔离性。 2. SQL路由:需要编写能够根据业务逻辑自动选择正确数据源和表的SQL,这可能需要自定义拦截器或切面处理...

    Spring-boot+mybatis多数据源整合(动态切换数据源)

    在业务代码中,你需要在执行SQL之前设置当前的数据源。可以创建一个ThreadLocal变量来保存数据源信息,比如`DataSourceContextHolder`。 ```java public class DataSourceContextHolder { private static final...

    Springboot整合Druid与Mybatis的多数据源切换

    别忘了为每个数据源设置不同的名字,如`primaryDataSource`和`secondaryDataSource`。 4. **创建数据源路由`DataSourceRouter`**:自定义一个实现了`AbstractRoutingDataSource`的类,用于根据业务逻辑选择使用哪个...

    java spring mybaits 读写分离插,多数据源,数据库记录合并

    总之,通过Spring和MyBatis实现的读写分离,结合动态数据源和适当的事务管理策略,可以有效提高系统性能,同时通过数据库记录合并确保数据一致性。在实际开发中,需要根据项目需求选择合适的数据源管理方案,并注意...

    mybaits-spring配置

    总结来说,"mybaits-spring配置"涉及到的主要知识点包括:Spring的DataSource配置、SqlSessionFactory的创建、Mapper接口的扫描、事务管理器的设置以及AOP事务配置。这些配置使得MyBatis能够无缝融入到Spring环境中...

    springboot + mybatis +mysql+ sqlserver 双数据源

    本项目"springboot + mybatis +mysql+ sqlserver 双数据源"正是针对这种需求的一个解决方案,它利用SpringBoot框架、MyBatis持久层框架以及MySQL和SQLServer两种数据库,实现了数据源的自动切换,以满足不同业务场景...

    Spring4.1.7+atomikos+mybaits 实现两阶段的分布式事务处理

    将基于Spring4.1.7+atomikos+mybaits 实现两阶段的分布式事务处理,通过AOP面向切面实现动态实现数据源的切换 http://www.dczou.com/viemall/407.html

    spring多数据源的处理_mybatis实现跨库查询

    然后,我们需要建立一个获得和设置上下文环境的类,主要负责改变上下文数据源的名称。最后,我们需要在 spring 配置文件中配置多个数据源。 在 spring 配置文件中,我们需要定义多个数据库的连接信息,例如驱动程序...

    基于Spring4.1.7+atomikos+mybaits 实现两阶段的分布式事务处理

    4. 配置MyBatis:设置SqlSessionFactory,并确保其使用Atomikos提供的数据源。 5. 开启事务支持:在需要执行分布式事务的Service类中,使用@Transactional注解标注方法,Spring会自动创建并管理事务。 通过以上步骤...

    springboot+mybatisplus(mybatis)+mysql+oracle 多数据源项目

    在本项目中,我们主要探讨的是如何利用Spring Boot框架与Mybatis Plus进行多数据源的配置和管理,同时结合MySQL和Oracle两种不同的数据库系统。这是一个典型的企业级应用场景,能够帮助开发者更好地理解和处理多...

    mybaits demo

    1. **MyBatis配置**:了解如何在mybatis-config.xml文件中配置数据源、事务管理器以及环境信息。 2. **Mapper接口与XML映射文件**:学习如何创建Mapper接口和对应的XML文件,定义SQL语句和结果映射。 3. **...

    springboot数据访问之整合Mybaits(注解方式,Druid数据源)包含数据库文件

    在本文中,我们将深入探讨如何在Spring Boot项目中整合MyBatis框架,使用注解方式进行数据访问,并结合Druid数据源来实现高效的数据管理。首先,我们先了解一下Spring Boot、Spring、Java以及后端开发的基本概念。 ...

    SpringBoot整合Mybatis连接SQL Server 双数据源配置

    确保在每次切换数据源后都正确设置和清除`DataSourceContextHolder`,以防止数据源混淆。同时,合理设计事务边界,确保数据的一致性。 以上内容详细阐述了如何在Spring Boot项目中整合Mybatis并配置连接SQL Server...

    mybaits代码生成器

    &lt;table tableName="your_table_name" domainObjectName="YourClassName" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" ...

    mybaits逆向工程

    这个文件定义了逆向工程的参数,包括数据源信息、生成的目标目录、模板设置等。例如: ```xml &lt;properties resource="generator.properties"&gt; &lt;!-- 数据库连接信息 --&gt; &lt;context id="MySQL" targetRuntime=...

    Mybaits 文档

    - **environments**:配置多个环境(例如development和production),每个环境可以有不同的数据源和事务管理器配置。 - **dataSource**:指定数据源配置,可以使用内置的数据源或通过JNDI引用外部数据源。 - **...

    mybaits实例项目

    1. **配置文件**: MyBatis的配置文件(通常命名为`mybatis-config.xml`)是整个框架的中心,它定义了数据源、事务管理器、SqlSessionFactory等关键元素。配置文件中包含了关于数据库连接的信息,例如数据库驱动、URL...

    MybaitsDemo.zip

    接下来,创建一个配置类`DataSourceConfig.java`,在这里设置两个数据源并配置动态数据源: ```java @Configuration public class DataSourceConfig { @Primary @Bean(name = "primaryDataSource") @...

    mybatis-demo(多数据源配置).rar

    总结来说,MyBatis的多数据源配置涉及到Spring框架的DataSource配置、MyBatis的SqlSessionFactoryBean设置、自定义RoutingDataSource的实现以及业务代码中数据源的切换。掌握这一技能,能够帮助你在项目中灵活处理多...

    手写mybaits框架代码

    手写mybaits框架代码手写mybaits框架代码手写mybaits框架代码手写mybaits框架代码手写mybaits框架代码手写mybaits框架代码手写mybaits框架代码手写mybaits框架代码手写mybaits框架代码手写mybaits框架代码手写...

Global site tag (gtag.js) - Google Analytics