【Spring】事务控制

【Spring】事务控制,第1张

有两种事务控制的方法:编程式(硬编码,代码,API)vs 声明式(xml或注解)

声明式的好处:事务管理不侵入开发的组件,更改只需要在定义文件中出现配置即可。业务逻辑对象不会意识到处在事务管理之中,事实上也该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分。而且不需要事务管理时可关闭,符合开闭原则。(解耦)

Spring声明式事务控制底层就是aop。

  • 编程式事务控制3大对象:
  • (关系)PlatformTransactionManager( *** 作事务行为)+TransactionDefinition(设置事务属性)=TransactionStatus(反馈事务运行过程中的信息,被动产生,不需配置)
  • (一)接口-PlatformTransactionManager(平台事务管理器)
  • 不同的Dao层(持久层)技术则有不同的PlatformTransactionManager实现类,例如,Dao层技术是jdbc或mybatis时,PlatformTransactionManager的实现类是org.springframework.jdnc.DataSourceTransactionManager,Dao层技术是Hibernate时是org.springframework.orm.hibernate5.HibernateTransactionManager

TransactionStatus getTransaction(TransactionDefinition definition):获取事务的状态信息

void commit(TransactionStatus status):提交事务

void rollback(TransactionStatus status):回滚事务

  • (二)TransactionDefinition(定义信息对象)

int getIsolationLevel():获得事务的隔离级别

  • 事务的隔离级别:解决事务并发产生的问题,如脏读,不可重复读和虚读

ISOLATION_DEFAULT

ISOLATION_READ_UNCOMMITTED

ISOLATION_READ_COMMITTED

ISOLATION_REPEATABLE_READ

ISOLATION_SERIALIZABLE

  • 这里复习一下数据库的知识:

int getPropogationBehaviour():获得事务的传播行为

int getTimeout():获得超时时间

boolean isReadOnly():是否只读

  • 事务的传播行为:

REQUIRED(default):如果当前没有事务就新建一个;如果存在一个事务,就加入到这个事务中

SUPPORTS:支持当前事务,如果当前没有事务属性就以非事务方式执行(没有事务)

...还有一些属性

超时时间:设为-1时,没有超时限制;有就以秒为单位进行设置

是否只读:建议查询时设置为只读

  • (三)接口-TransactionStatus(事务具体的运行状态)

boolean hasSavePoint():是否存储回滚点

boolean isCompleted():事务是否完成

boolean isNewTransaction():是否是新事务

boolean isRollbackOnly():事务是否回滚

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/788018.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存