java spring 事务处理_JavaWeb学习:Spring的事务管理

一、Spring的事务管理的API

①、PlatformTransactionManager:平台事务管理器

平台事务管理器:接口,是Spring用于管理事务的真正的对象。

DataSourceTransactionManager            :底层使用JDBC管理事务

HibernateTransactionManager                 :底层使用Hibernate管理事务

②、TransactionDefinition         :事务定义信息

事务定义:用于定义事务的相关的信息,隔离级别、超时信息、传播行为、是否只读

③、TransactionStatus:事务的状态

事务状态:用于记录在事务管理过程中,事务的状态的对象。

二、事务管理的API的关系

Spring进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理,在事务管理过程中,产生各种状态,将这些状态的信息记录到事务状态的对象中。

三、Spring的事务的传播行为

Spring中提供了七中事务的传播行为

public void方法A(){

xxDao.save();

yyDao.update();

}public void方法b(){

方法A();

zzDao.del();

ttDao.update();

}

保证多个操作在同一个事务中

PROPAGATION_REQUIRED:默认值,如果方法A中有事务,使用方法A中的事务,如果没有事务,创建一个新事务。

PROPAGATION_SUPPORTS:支持事务,如果方法A中有事务,使用方法A中的事务。如果没有,不使用事务

PROPAGATION_MANDATORY:如果方法A中有事务,使用方法A中的事务,如果没有,抛出异常

保证多个操作不在同一个事务中

PROPAGATION_REQUIRES_NEW:如果方法A中有事务,将事务挂起,创建新事务,只包含自身操作。如果方法A中没有事务,创建新事务,包含自身操作。

PROPAGATION_NOT_SUPPORTED:如果方法A中有事务,将事务挂起。不使用事务管理

PROPAGATION_NEVER:如果方法A中有事务,抛出异常

嵌套式事务

PROPAGATION_NESTED:如果方法A中有事务,按照A的事务执行,执行完成后,设置一个保存点,执行方法B中的操作,如果没有异常,执行通过,如果有异常,选择回滚到最初位置或回滚到保存点。

四、Spring的事务管理

①、搭建Spring的事务管理的环境

Ⅰ、创建Service的接口和实现类

public class AccountServiceImpl implementsAccountService {privateAccountDao accountDao;public voidsetAccountDao(AccountDao accountDao) {this.accountDao =accountDao;

}

@Overridepublic voidtransfer(String from, String to, BigDecimal money) {

accountDao.outMoney(from, money);

accountDao.inMoney(to, money);

}

}

Ⅱ、创建DAO的接口和实现类

public class AccountDaoImpl extends JdbcDaoSupport implementsAccountDao {

@Overridepublic voidoutMoney(String from, BigDecimal money) {this.getJdbcTemplate().update("update account set money=money - ? where name = ?", money, from);

}

@Overridepublic voidinMoney(String to, BigDecimal money) {this.getJdbcTemplate().update("update account set money=money + ? where name = ?", money, to);

}

}

Ⅲ、配置Service和DAO交给Spring管理

Ⅳ、配置连接池

Ⅴ、在DAO注入Jdbc的模板(注入的是dataSource的原因extends JdbcDaoSupport ,查看JdbcDaoSupport 的代码有setDataSource方法)

Ⅵ、编写测试方法

@SpringJUnitConfig(locations = "classpath:tx.xml")public classSpringTxDemo {

@AutowiredprivateAccountService accountService;

@Testpublic voiddemo1() {

accountService.transfer("zhangsan", "lisi", new BigDecimal(1000.00));

}

}

五、Spring的事务管理

①、一类:编程式事务(需要手动编写代码)

Ⅰ、配置平台事务管理器

Ⅱ、Spring提供了事务管理的模板类

Ⅲ、业务层(Service)需要使用事务,将书屋管理模板类注入到业务层

②、二类:声明式事务管理(通过配置实现)---底层原理:AOP(面向切面)

在方法上通过增强的方式添加事务处理,此事务增强是环绕通知和异常抛出通知,不需要手动编写了,只需要配置就可以了

Ⅰ、XML方式的声明式事务管理

1、引入aop的开发包

2、配置事务管理器

3、配置增强

在使用需要添加约束

http://www.springframework.org/schema/beans

https://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

https://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/aop

https://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd">

4、AOP的配置

Ⅱ、注解方式的声明式事务管理

1、引入aop的开发包

2、配置事务管理器

3、开启注解事务

4、在业务层添加注解

@Transactionalpublic class AccountServiceImpl implementsAccountService {privateAccountDao accountDao;public voidsetAccountDao(AccountDao accountDao) {this.accountDao =accountDao;

}

@Overridepublic voidtransfer(String from, String to, BigDecimal money) {

accountDao.outMoney(from, money);int d = 1 / 0;

accountDao.inMoney(to, money);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值