WEB开发网
开发学院软件开发Java Spring 事务管理高级应用难点剖析,第 1 部分 阅读

Spring 事务管理高级应用难点剖析,第 1 部分

 2010-03-22 00:00:00 来源:WEB开发网   
核心提示: 运行 UserJdbcWithoutTransManagerService,在控制台上打出如下的结果:defaultAutoCommit:truescore:30在 jdbcWithoutTransManager.xml 中,Spring 事务管理高级应用难点剖析,第 1 部分(3),没有配置任

运行 UserJdbcWithoutTransManagerService,在控制台上打出如下的结果:

defaultAutoCommit:true 
score:30 

在 jdbcWithoutTransManager.xml 中,没有配置任何事务管理器,但是数据已经成功持久化到数据库中。在默认情况下,dataSource 数据源的 autoCommit 被设置为 true ―― 这也意谓着所有通过 JdbcTemplate 执行的语句马上提交,没有事务。如果将 dataSource 的 defaultAutoCommit 设置为 false,再次运行 UserJdbcWithoutTransManagerService,将抛出错误,原因是新增及更改数据的操作都没有提交到数据库,所以 ④ 处的语句因无法从数据库中查询到匹配的记录而引发异常。

对于强调读速度的应用,数据库本身可能就不支持事务,如使用 MyISAM 引擎的 MySQL 数据库。这时,无须在 Spring 应用中配置事务管理器,因为即使配置了,也是没有实际用处的。

不过,对于 Hibernate 来说,情况就有点复杂了。因为 Hibernate 的事务管理拥有其自身的意义,它和 Hibernate 一级缓存有密切的关系:当我们调用 Session 的 save、update 等方法时,Hibernate 并不直接向数据库发送 SQL 语句,而是在提交事务(commit)或 flush 一级缓存时才真正向数据库发送 SQL。所以,即使底层数据库不支持事务,Hibernate 的事务管理也是有一定好处的,不会对数据操作的效率造成负面影响。所以,如果是使用 Hibernate 数据访问技术,没有理由不配置 HibernateTransactionManager 事务管理器。

但是,不使用 Hibernate 事务管理器,在 Spring 中,Hibernate 照样也可以工作,来看下面的例子:

清单 3.UserHibernateWithoutTransManagerService.java

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Spring 事务管理 高级

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接