DataSource和Transactional原理介绍

转载自人工博客-DataSource和Transactional原理介绍

1、基础概念

名词 介绍
jdbc java操作数据库的一个规范
connection java程序与数据库建立的网络连接,是操作数据库的核心。但是创建和销毁是比较耗费资源
datasource 池化复用connection,提供程序的性能
transaction 保证一组相关联的数据库操作的一致性,要么同时成功,要么同时失败

2、工作原理

2.1、dataSource的原理

利用池化技术,维护了一定量的connection.减少了创建和销毁connection带来的性能损耗。同时可以提供一些辅助的功能,如sql预编译、sql监控等

2.2、transaction的原理

要保证事务,核心是要保证所有的sql的执行都使用的是同一个connection,且必须是手动提交的模式。所以当是transaction的模式下,强制将autoCommit修改为false,将connection以ThreadLocal的模式进行了存储,保障了在同一个线程的同一个事务里的获取的connection都是同一个。

3、容易出现的问题

3.1、连接池管理

连接池管理关键的2个参数是必须设置最大的等待时间最大的等待线程数

3.2、事务模式下无法切换数据源

事务模式下,内部切换数据源是无效的,原因是内部获取的conection都是从threadlocal中获取的。都是事务内第一个获取的链接。

案例细节参考:@Transactional导致AbstractRoutingDataSource动态数据源无法切换的解决办法

posted @ 2021-07-02 11:27  辛勤的蜜蜂  阅读(270)  评论(0编辑  收藏  举报