您的位置:首页 > 编程语言 > Java开发

在spring中使用事务的方式以及注意事项,相信你看了会有很多认识

2017-03-30 23:22 447 查看
一、在spring中如何使用事务

1.在application.xml文件中配置事务管理器

<!-- 配置事务管理器 -->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"></property>

</bean>

2.启动事务

<!-- 启用事务注解 -->

<tx:annotation-driven transaction-manager="transactionManager"/>

3.为需要的类的方法下添加事务注解

//添加事务注解

/**

* 添加事务注解之后,如果某个sql出现异常。则其他语句也不会执行

*

*/

@Transactional

public void purchase(String username, String isbn) {

// TODO Auto-generated method stub

// 1.获取图书单价

int price = bookshopdao.findBookPrice(isbn);

// 2.更新图书的库存

bookshopdao.updateBookStock(isbn);

// 3.更新用户余额

bookshopdao.upateUserAccount(username, price);

}

二、事务的传播属性

1.当事务方法被另一个事务方法调用时候,必须指定事务应该如何传播。例如:方法可能继续在现有的事务中运行。也可能开启一个新的事务。并在机子的事务中运行。

2.事务的传播行为可以由传播属性制定。Spring定义了七种类传播行为。

使用注解的方式进行配置事务

/**添加事务注解。

* 下边这本来就是一个事务。他还可以调用另一个事务

*1.使用propagation指定事务传播行为,即当前的事务方法被另一个事务的方法调用时候

*如何使用事务,默认取值为REQUIRED。即使用调用方法的事务

*REQUIRES_NEW:事务自己的事务。调用的事务方法被挂起

*2.使用isolation 指定事务的隔离级别。最常用的取值为READ_COMMITTED

*3.默认情况下Spring的声明式事务对所有的运行时异常进行回滚,也可以通过对应的属性进行设置

* noRollbackFor={UserAccountException.class}即对哪些异常不进行回滚

* 通常情况下去默认值。即对所有的异常都回进行回滚

*4.使用readOnly指定事务是否为只读,表示这个事务只读区数据单不更新数据。这样可以帮助数据库引擎优化事务

*若真的是一个只读数据库的方法。应设置readOnly为true readOnly=true

*5.使用timeout指定强制回滚之前事务可以占用的时间,超过这个时间可以进行强制回滚

*

*/

// @Transactional 这是默认的事务执行方式

@Transactional(propagation=Propagation.REQUIRES_NEW,

isolation=Isolation.READ_COMMITTED,

noRollbackFor={UserAccountException.class},

readOnly=false,

timeout=3)

public void checkout(String username, List<String> isbns) {

// TODO Auto-generated method stub

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

for(String a:isbns){

bookshopserivice.purchase(username, a);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息