sharding调试setAutoCommit
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
最新文章
- strace命令(收集整理,常看常新)
- 记2012-2013年一路的Windows Phone历程
- 浅谈Dynamic 关键字系列之三(上):ExpandoObject, DynamicObject, DynamicMetaObject
- Linux常用命令-入门
- PHP preg_replace() 正则替换所有符合条件的字符串示例
- Js 对象三
- CDN调度器HAProxy、Nginx、Varnish
- SQL中的delete和TRUNCATE的用法
- 在linux中配置tomcat
- 为什么国外程序员爱用苹果Mac电脑?(转)
- Java和Flex整合报错(四)
- LDA &;&; NCA: 降维与度量学习
- [Codeforces235D]Graph Game——概率与期望+基环树+容斥
- Python加密保护解决方案
- python自动化测试入门篇-jemter
- Wampserver 403问题
- Codeforces Round #228 (Div. 1)
- spring/spirng boot添加fluent日志-aop
- D12——C语言基础学PYTHON
- Linux磁盘空间扩容(LVM)
热门文章
- Redis 数据结构与编码技术 (Object Encoding)
- 多快好省地使用pandas分析大型数据集
- Luogu P4546 [THUWC2017]在美妙的数学王国中畅游
- HP UNIX 查看 修改IP地址
- 需要加强NB-IoT网络优化和终端监管
- Linux下的django项目01
- Statistical physics approaches to the complex Earth system(相关系统建模理念方法的摘要)
- C语言中利用clock设计一个简单的定时器
- 自定义泛型方法, 三级排序, low版,待升级
- 了解TypeScript