关于Spring@Transactional 的事务控制问题

2024-12-01 07:38:55
推荐回答(1个)
回答1:

看下下面的代码,不知道能不能解决你的问题:

class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">

org.gjt.mm.mysql.Driver


jdbc:mysql://localhost/sample


user


mypass


class="org.springframework.jdbc.datasource.DataSourceTr
ansactionManager">









class="org.springframework.transaction.interceptor.Tran
sactionProxyFactoryBean">








PROPAGATION_REQUIRED

PROPAGATION_REQUIRED,readOnly






配置中包含了dataSource,transactionManager 等资源定义。这些资源都为
一个名为userDAOProxy 的TransactionProxyFactoryBean 服务, 而
userDAOProxy 则对包含实际数据逻辑的userDAO进行了事务性封装。
可以看到,在userDAOProxy 的"transactionAttributes"属性中,我们定义了
针对userDAO 的事务策略,即将所有名称兆培首以insert 开始的方法(如
UserDAO.insertUser方法)纳入事务管理范围中散。如果此方法中抛出异常,则Spring
将当前事务回滚,如果方法正常结束,则提交事务。
而对所有名称以get 开始的方法(如UserDAO.getUser 方法)则以只读的事务
处理机制进行处理。(设为只读型事务,可以使持久层尝试对数据操作进行优化,如对
于只读事务Hibernate将不执行flush操作,而某些数据库连接池和JDBC 驱动也对
只读型操作族数进行了特别优化。)