wuheng преди 2 години
родител
ревизия
ca5cbc29e9
променени са 1 файла, в които са добавени 28 реда и са изтрити 2 реда
  1. 28 2
      day03/src/main/java/com/lovecoding/jdbc/service/UserBuyBookServiceImpl.java

+ 28 - 2
day03/src/main/java/com/lovecoding/jdbc/service/UserBuyBookServiceImpl.java

@@ -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( "购买书本成功!" );
     }
 }