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

Spring学习(十五)-事务的其他属性

2017-08-23 16:52 169 查看
事务的属性:

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

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

REQUIRES_NEW使用自己的事务 调用的事务方法的事务被挂起

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

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

属性进行设置为readOnly=true

5.使用timeout指定强制回滚之前事务可以占用的时间

1.BookShopServiceImpl实现类

“`

package com.spring.tx;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Isolation;

import org.springframework.transaction.annotation.Propagation;

import org.springframework.transaction.annotation.Transactional;

@Service(“bookShopService”)

public class BookShopServiceImpl implements BookShopService {

@Autowired
public BookShopDao bookShopDao;

/*添加事务注解
* 1.使用propagation指定事务的的传播行为,即当前的事务方法被另一个事务方法调用时
* 如何使用事务,默认取值为REQUIRED,即使用调用方法的事务
* REQUIRES_NEW使用自己的事务 调用的事务方法的事务被挂起
* 2.使用isolation指定事务的隔离级别,最常用的取值为READ_COMMITTED
* 3.默认情况下Spring的声明式事务对所有的运行时异常进行回滚,也可通过对应的属性进行设置
* 4.使用readOnly指定事务是否为可读,表示这个事务只读数据但不更新数据
* 应设置为readOnly=true
* 5.使用timeout指定强制回滚之前事务可以占用的时间
* @Transactional(propagation=Propagation.REQUIRES_NEW,
isolation=Isolation.READ_COMMITTED,
noRollbackFor= {UserAccountException.class},
readOnly=false,
timeout=3)

*/
@Transactional(propagation=Propagation.REQUIRES_NEW,
isolation=Isolation.READ_COMMITTED)
@Override
public void purchase(String username, String isbn) {

try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//1.获取书的单价
int price=bookShopDao.findBookPriceByIsbn(isbn);
//2.更新书的库存
bookShopDao.updateBookStock(isbn);
//3.更新用户余额
bookShopDao.updateUserAccount(username, price);

}


}

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