spring对事务的管理
今天讲了Spring的事务,及对hibernate的整合,对struts的整合。以后还得学习,记不住,用到再整理。
1.事务的四大特点:
atomic:要么都发生,要么都不发生。
consistent:数据应该不被破坏。
Isolated:用户间操作不相混淆
Durable:永久保存
2.介绍spring的事务管理器
spring没有直接管理事务,而是将管理事务的责任委
托给某个特定平台的事务实现。
3.Hibernate事务:
<bean id="transactionManager"
class="…HibernateTransactionManager">
<property name="sessionFactory" ref="sf" />
</bean>
其中sessionFactory属性必须和一个Hibernate的SessionFactory绑定
HibernateTransactionManager把事务管理委托给一个从Hibernate
session 中取得的net….Transaction对象。当一个事务成功完成时,
HibernateTransactionManager将调用Transaction对象的commit()
方法。类似的,当一个事务失败时,Transaction对象的rollback()方
法将被调用。
4.事务属性
1.隔离级别:设定事务的并发程度
脏读:一个事务读取了另一个事务改写但还未
提交的数据,如果这些数据被回滚,则
读到的数据是无效的。
不可重复读:一个事务执行相同的查询两次或两次以
上,但每次查询结果都不同。
幻读:一个事务读取了几行记录后,另一个事务插入一
些记录,幻读就发生了。再后来的查询中,第一
个事务就会发现有些原来没有的记录。
2.只读 若对数据库只进行读操作,可设置事务只读的属性,使用某些优化措施。数据库会进行优化处理。若使用hibernate作为持久化机制,声明一个只读事务会使hibernate的flush模式设置为FLUSH_NEVER。避免不必要的数据同步,将所有更新延迟到事务的结束。
3.事务超时 若事务在长时间的运行,会不必要的占用数据库资源。设置超时后,会在指定的时间片回滚。将那些具有可能启动新事务的传播行为的方法的事务设置超时才有意义
5.CMT:容器管理事务
BMT:bean 管理事务
<tx:annocation-driven transaction-manager="hibernateTransactionManager"/>
类上加@Transactional
6.总结:
事务策略
在业务中不能加try catch ,因为Spring的环绕通知在出现异常时会回滚事务,你已捕获,就会提交事务(任何情况下)
7.Spring整合Struts
1.web服务器启动时,完成Spring容器的实例化。plugin|listener
2.struts中的action交给Spring容器管理。
3.基本操作
注意:在spring上下文中,作为普通bean配置action,但action的不能用id,只能用name,
因为需要struts-config.xml文件中action的path一致.
bean.xml
<bean name="/loginAction" class="..LoginAction">
<property name="xxxService" ref="xxxService" />
</bean>