emmm应该是有manager的 因为指定了@Primary 不然容器启动的时候创建sessionFactory就因为多个DataSource异常了,后面会滚的时候manager为null也会有运行时异常,因为@Primary autoconfig 的@ConditionalOnSingleCandidate是生效的,应该是用primary构造的manager,跟到后面DruidPooledConnection也是用mysql的jdbc实现去做rollback,后面倒是有这样一个check:

但是最后应该会抛sqlException异常才是,我用shardingConnection测试的时候这里是可以放过的。要看下DriudPooledConnection是构造过程是怎样的,
DriudPooledConnection是通过DruidDataSource.getConnection构造的最后跟到这里:



我调的的时候拿到的connection确实是true的,拿到connection之后 sharding调用了这个方法:
org.apache.shardingsphere.shardingjdbc.jdbc.adapter.WrapperAdapter#replayMethodsInvocation



这里刚好有个Method对象setAutoCommit(false)



jdbcMethodInvocations的初始化有多很多场景 其中有个场景是针对autocommit的



一层层堆栈跟过去:
org.springframework.jdbc.datasource.DataSourceTransactionManager#doBegin:
org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection#setAutoCommit
org.apache.shardingsphere.shardingjdbc.jdbc.adapter.AbstractConnectionAdapter#setAutoCommit
所以DataSourceTransactionManager在事务开始的时候是有调用conn.setAutoCommit(false),具体的实现留给了conn的实现类。
这个conn的引用是怎么获得的呢?
通过manager的内部类得到org.springframework.jdbc.datasource.ConnectionHolder,而ConnectionHolder是在
org.springframework.jdbc.datasource.DataSourceTransactionManager#doBegin
通过datasource.getConnection得到:

所以问题回到datasource.getConnection

sharding调试setAutoCommit的更多相关文章

  1. JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署

    接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...

  2. Sharding JDBC整合SpringBoot 2.x 和 MyBatis Plus 进行分库分表

    Sharding JDBC整合SpringBoot 2.x 和 MyBatis Plus 进行分库分表 交易所流水表的单表数据量已经过亿,选用Sharding-JDBC进行分库分表.MyBatis-P ...

  3. Sharding jdbc 强制路由策略(HintShardingStrategy)使用记录

    背景 随着项目运行时间逐渐增加,数据库中的数据也越来越多,虽然加索引,优化查询,但是数据量太大,还是会影响查询效率,也给数据库增加了负载. 再加上冷数据基本不使用的场景,决定采用分表来处理数据,从而来 ...

  4. C# Web应用调试开启外部访问

    在用C#开发Web应用时有个痛点,就是本机用VS开启Web应用调试时外部机器无法访问此Web应用.这里将会介绍如何通过设置允许局域网和外网机器访问本机的Web应用. 目录 1. 设置内网访问 2. 设 ...

  5. NodeJs之调试

    关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...

  6. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...

  7. 写出易调试的SQL(修订版)

    h4 { background: #698B22 !important; color: #FFFFFF; font-family: "微软雅黑", "宋体", ...

  8. tomcat开发远程调试端口以及利用eclipse进行远程调试

    一.tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里:  SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compi ...

  9. Hawk 4.7 单步调试

    单步调试的意义 已经编写的工作流,可能会因为某些外界环境的变化而出错,此时需要排除错误,我们可以使用单步调试. 单步调试的本质,相当于只使用前n个模块,这样就能看到每个步骤下,流的改变. 例子 还是上 ...

随机推荐

  1. 虚拟化下Centos7 扩容根分区

    查看分区大小和挂载情况 用到的命令df.lsblk [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/ ...

  2. pause容器作用

    1.概念 Pause容器 全称infrastucture container(又叫infra)基础容器. 作为init pod存在,其他pod都会从pause 容器中fork出来. 每个Pod里运行着 ...

  3. Linux 环境编程:dirfd参数 有关解析

    背景 在Unix环境编程中,系统提供了很多以at结尾的函数,如openat.fstatat等,而这类函数通常有一个特点,就是形参列表中多了int dirfd 例如: int open(const ch ...

  4. ArrayList扩容机制

    一.先从 ArrayList 的构造函数说起 ArrayList有三种方式来初始化,构造方法源码如下: 1 /** 2 * 默认初始容量大小 3 */ 4 private static final i ...

  5. Mybatis执行SQL的完整过程及四大组件介绍

    一切的执行从MapperProxy开始,MapperProxy是MapperProxyFactory使用SqlSession创建出来的.所以MapperProxy中包含SqlSession. 可以看到 ...

  6. SSM实现文件上传

    1.导入上传需要的jar包 commons-fileupload-1.3.3.jar commons-io-2.6.jar 2.创建 index.jsp <%@ page contentType ...

  7. MapReduce在Shuffle阶段按Mapper输出的Value进行排序

    ZKe ----------------- 在MapReduce框架中,Mapper的输出在Shuffle阶段,根据Key值分组之后,还将会根据Key值进行排序,因此Reducer的输出我们看到的结果 ...

  8. C# 集合类(三)

    C# 集合类自己经常用到: 数组(Array).动态数组(ArrayList).列表(List).哈希表(Hashtable).字典(Dictionary),对于经常使用的这些数据结构,做一个总结,便 ...

  9. ubuntu下创建http服务器

    使用ubuntu搭建一个简单的http服务器安装apache21.sudo apt-get update2.sudo apt-get install apache2 安装成功后,再/etc/apach ...

  10. .NetCore Docker一次记录

    1:项目添加docker支持 2:定位到项目主目录 按住shift,鼠标右键,打开powershell,输入命令 dotnet publish 此时会在目录 bin\Debug\netcoreapp2 ...