在此用一個小例子來測試事務管理是否成功配置。代碼基礎是SSM框架搭建里面的測試代碼。我們現在測試的方法是:我要插入一個User對象的集合,如果此對象數量小於2,那么可以成功插入,但是如果大於2,那么就拋出異常(事務處理必須拋出異常,只有這樣Spring才幫助事務回滾),這樣數據庫就會回滾,不插入任何數據。測試結果如果數據庫沒插入任何數據,那么表示事務處理配置成功,反正,失敗。
注意@Transactional只能被應用到public方法上,對於其它非public的方法,如果標記了@Transactional也不會報錯,但方法沒有事務功能。
實體類、DAO接口,業務接口,以及業務實現都有,這個測試僅需要在業務層中添加一個方法,然后使用JUnit測試即可,業務實現類中添加如下方法,注意注解@Transactional:
/** * 事務處理必須拋出異常,Spring才會幫助事務回滾 * @param users */ @Transactional @Override public void insertUser(List<User> users) { for (int i = 0; i < users.size(); i++) { if(i<2){ this.userDao.insert(users.get(i)); } else { throw new RuntimeException(); } } }
接下來在測試類中添加如下方法進行測試:
@Test public void testTransaction(){ List<User> users = new ArrayList<User>(); for(int i=1;i<5;i++){ User user = new User(); user.setAge(i); user.setPassword(i+"111111"); user.setUserName("測試"+i); users.add(user); } this.userService.insertUser(users); }
注意:此時進行JUnit測試會發現出現錯誤,這是因為方法中拋出了這個異常。實質上確實進行了事務管理,數據沒有插入,此時表示配置成功了;反之,如果去掉注解,那么前兩條數據會插入成功,然后后面會拋出異常。