读书人

深入分析Spring混同事务

发布时间: 2013-09-15 19:58:13 作者: rapoo

深入分析Spring混合事务

在ORM框架的事务管理器的事务内,使用JdbcTemplate执行SQL是不会纳入事务管理的。

下面进行源码分析,看为什么必须要在DataSourceTransactionManager的事务内使用JdbcTemplate。


1开启事务

DataSourceTransactionManager

===============================================================================

                            if(txObject.isNewSessionHolder()) {                                     TransactionSynchronizationManager.bindResource(getSessionFactory(),txObject.getSessionHolder());                            }

因为ORM框架都不是直接将DataSource注入到TransactionManager中使用的,而是像上面Hibernate事务管理器一样,使用自己的SessionFactory等对象来操作DataSource。所以尽管可能SessionFactory和JdbcTemplate底层都是一样的数据源,但因为在TransactionSynchronizationManager中绑定时使用了不同的Key(一个是sessionFactory名,一个是dataSource名),所以JdbcTemplate执行时是拿不到ORM事务管理器开启事务的那个数据库连接的。

读书人网 >编程

热点推荐