mysql事务提交 注释_事务@Transactional注解的属性

packagecom.atguigu.book.service.impl;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importorg.springframework.transaction.annotation.Isolation;importorg.springframework.transaction.annotation.Propagation;importorg.springframework.transaction.annotation.Transactional;importcom.atguigu.book.dao.BookDao;importcom.atguigu.book.exception.MyException;importcom.atguigu.book.service.BookService;

@Service//@Transactional

public class BookServiceImpl implementsBookService {

@AutowiredprivateBookDao dao;/*** @Transactional:对方法中所有的操作作为一个事务进行管理

* 在方法上使用,只对方法有效果

* 在类上使用,对类中所有的方法都有效果

* @Transactional中可以设置的属性:

*

* propagation:A方法和B方法都有事务,当A在调用B时,会将A中的事务传播给B方法,B方法对于事务的处理方式就是事务的传播行为

* Propagation.REQUIRED:必须使用调用者的事务(默认值)

* Propagation.REQUIRES_NEW:将调用者的事务挂起,不使用调用者的事务,使用新的事务进行处理

*

* isolation:事务的隔离级别,在并发的情况下,操作数据的一种规定

* 读未提交:脏读 1

* 读已提交:不可重复读 2

* 可重复读:幻读 4

* 串行化:性能低,消耗大 8

*

*

* timeout:在事务强制回滚前最多可以执行(等待)的时间

*

* readOnly:指定当前事务中的一系列的操作是否为只读

* 若设置为只读,不管事务中有没有写的操作,mysql都会在请求访问数据的时候,不加锁,提高性能

* 但是如果有写操作的情况,建议一定不能设置只读

*

* rollbackFor|rollbackForClassName|noRollbackFor|noRollbackForClassName:设置事务回滚的条件*/@Transactional(propagation=Propagation.REQUIRES_NEW, timeout=3, noRollbackFor= {NullPointerException.class, MyException.class})public voidbuyBook(String bid, String uid) {/*try {

Thread.sleep(5000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}*/Integer price=dao.selectPrice(bid);

dao.updateSt(bid);

dao.updateBalance(uid, price);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值