當一個事務方法(假定A)被另外一個事務方法(假定B)調用時,必須指定事務如何傳播。存在以下兩種狀況
1>該方法(A)繼續在現有事務(方法B的事務)中運行
2>新開啓一個事務,並在本身的事務中運行(獨立事務)
依賴於上篇文件類,這裏新增一個接口和類
//接口文件app
public interface Cashier { /** * 一個用戶一次買多本書 */ public void checkout(Integer userId,List<Integer> bookIds); }
//接口實現類ide
@Service("cashier") public class CashierImpl implements Cashier { @Autowired private BookShopService bookShopService; @Transactional @Override public void checkout(Integer userId, List<Integer> bookIds) { for (int bookId : bookIds) { bookShopService.purchase(userId, bookId); } } }
測試類測試
public class TestTx { private ApplicationContext ctx; private Cashier cashier; { ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); cashier = ctx.getBean(Cashier.class); } @Test public void testTransaction(){ cashier.checkout(1000, Arrays.asList(1001,1002)); } }