|
@@ -5,6 +5,7 @@ import com.lovecoding.jdbc.dao.Book;
|
|
|
import com.lovecoding.jdbc.dao.User;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Isolation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
@Service
|
|
@@ -24,16 +25,41 @@ public class UserBuyBookServiceImpl implements UserBuyBookService{
|
|
|
@Autowired
|
|
|
private User user;
|
|
|
|
|
|
+ /**
|
|
|
+ * isolation
|
|
|
+ * 事务隔离级别 是处理多事务, 多个事务交叉的时候隔离事务用的参数
|
|
|
+ * 读未提交, 指的时候 一个事务可以读到 另一个事务未提交的修改内容
|
|
|
+ * 读已提交, 同样指的是 一个事务可以读到 另一个事务已经提交的修改
|
|
|
+ * 可重复读, 指的是 一个事务, 第一次读的东西, 被其他事务修改提交后, 依然读的是最初的值
|
|
|
+ * 串行话, 所有事务排队执行
|
|
|
+ */
|
|
|
@Override
|
|
|
- @Transactional
|
|
|
- @Logs
|
|
|
+ @Transactional(
|
|
|
+ timeout = 3,
|
|
|
+ noRollbackFor = java.lang.ArithmeticException.class,
|
|
|
+ isolation = Isolation.DEFAULT
|
|
|
+ )
|
|
|
public void buyBook(int uid, int bookid) {
|
|
|
//查询书的价格
|
|
|
int price = book.getBook(bookid);
|
|
|
+// try {
|
|
|
+// Thread.sleep(5000);
|
|
|
+// } catch (InterruptedException e) {
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
//扣减书的库存
|
|
|
this.book.subBook(bookid);
|
|
|
+ /**
|
|
|
+ * 我们在公司 开发项目, 会有很多人协作
|
|
|
+ * 每个人负责不同的代码, 最终代码混织在一起
|
|
|
+ * 这个时候, 别人的代码就有可能会抛异常, 但是这个异常可能不是正纳闷
|
|
|
+ * 自己的业务逻辑,所以我们可能会自己处理自己的异常
|
|
|
+ */
|
|
|
//扣减用户钱包
|
|
|
user.balance( price, uid );
|
|
|
+
|
|
|
+ int n = 1 / 0;
|
|
|
+
|
|
|
System.out.println( "购买书本成功!" );
|
|
|
}
|
|
|
}
|