logo
  • 世界杯预选赛瑞典
java事务讲解(详解篇)

本篇博客将各位介绍事务的相关内容,也算是对事物的大部分知识点进行的一个总结,接下来就跟着我一起来学习学习吧~

实现事务

实现事务的方式大类共有两大类,一种是编程式事务,另一种是声明式事务。

编程式事务的好处在于他的最小事务粒度可以达到某个代码块上,且可以根据具体的业务逻辑进行调整;但是坏处在于事务的代码实现和业务逻辑混合在一块,这样在管理业务代码和事务代码上就有了很强的耦合性,不方便管理。

声明式事务好处在于主要是通过aop的方式实现的,在方法上加上注解就可以在方法开始之前开启事务,在方法结束后选择提交事务或者是回滚事务,这样将业务逻辑和事务代码相隔开来更容易管理,实现了非侵入式管理;但是缺点也显而易见, 那就是事务的最小粒度为一个方法,无法做到一个代码块上。

那接下来就看看这两类实现事务的方式是如何实现的吧~

编程式事务

这类实现事务的方式主要是通过两种方式实现的,一种是通过PlatformTransactionManager,另一种是通过TransactionTemplate,我们先来看代码:

@Service

public class userService {

@Autowired

private PlatformTransactionManager platformTransactionManager;

@Autowired

private TransactionTemplate transactionTemplate;

public void usePlatfofrmTransaction() {

// 定义默认的事务属性

DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition();

TransactionStatus status = platformTransactionManager.getTransaction(transactionDefinition);

try {

//业务逻辑

// ....

platformTransactionManager.commit(status);

} catch (Exception e) {

platformTransactionManager.rollback(status);

e.printStackTrace();

}

}

public void useTransactionTemplate() {

transactionTemplate.execute(new TransactionCallbackWithoutResult() {

@Override

protected void doInTransactionWithoutResult(TransactionStatus status) {

try {

//业务逻辑

}catch (Exception e){

status.setRollbackOnly();

e.printStackTrace();

}

}

});

}

}

这两种都可以实现事务,但是各有千秋,比较推荐使用TransactionTemplate这种来实现。

对于这种有两个内部类实现:

第一种无返回值,第二种有返回值,根据具体业务代码进行选择。

声明式事务

这类事务实现方式主要就是通过@Transaction注解来实现的,我们又知道注解大部分有事通过aop的方式进行实现的,所以我们就可以在aop中来定义我们具体的事务处理。

因为这个使我们经常处理事务的方式,所以我们这里再来说一下事务的ACID性质,以及spring事务是如何进行处理的。

首先,这里还是简单说一下什么是事务的ACID性质:

Copyright © 2088 1990世界杯_世界杯竞猜 - xindsw.com All Rights Reserved.
友情链接