根据链接数理解spring事务

若是使用的不是同一个数据库链接,事务根本就无从谈起,验证下service方法添加注解@Transactional后的链接数。数据库

一次action请求动做能够操做多个service服务类,一个service服务能够访问多个dao类进行数据库操做,假设service中有dao1和dao2,在service方法中获取链接进行验证:spa

1、比较两次从datasource获取的Connection对象;对象

dao1.getDataSource().getConnection() != dao1.getDataSource().getConnection()事务

由于datasource的每次getConnection都是从链接池中获取一个可用的数据库链接,因此两次调用确定不是同一个链接;get

2、比较两次用DataSourceUtils从同一个dao的getDataSource获取的Connection对象;io

DataSourceUtils.getConnection(dao1.getDataSource()) != DataSourceUtils.getConnection(dao1.getDataSource())service

仍是不相等,同一个dao取到不一样链接,不一样dao确定也是不一样链接;请求

3、给service方法添加事务注解@Transactional;方法

DataSourceUtils.getConnection(dao1.getDataSource()) == DataSourceUtils.getConnection(dao2.getDataSource())数据

即便是在两个不一样的dao中使用的仍是同一个链接。

相关文章
相关标签/搜索