若是使用的不是同一个数据库链接,事务根本就无从谈起,验证下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中使用的仍是同一个链接。