public int dogetUserIdAndFindUserTokenTimeout(String userToken) throws Exception{
//經過userToken 獲取userId ,而且 檢查 令牌是否過期了,這樣就不用通過攔截器了,app 方便,個人架構也更加的好,也更加的靈活
Example example = new Example(IosTokenClient.class);
Example.Criteria select = example.createCriteria();
select.andEqualTo("token", userToken);ios
List<IosTokenClient> userTokens = iosTokenClientMapper.selectByExample(example);架構
if (userTokens.size() == 0) {
// 不存在該UUID
throw new LyecSystemException("2");// 令牌失效
} else {app
Date addTime = userTokens.get(0).getAddTime();
Date nowTime = new Date();
// 判斷時間是否相差過15天,超過15天無效
if (((nowTime.getTime() - addTime.getTime()) / (24 * 60 * 60 * 1000)) > 15) {
// 同時須要刪除該 過期的tokentoken
iosTokenClientMapper.deleteByPrimaryKey(userTokens.get(0).getId());事務
throw new Exception("2");// 這樣也是不會回滾的,由於 exception
// 比runtimeException大get
} else {it
return userTokens.get(0).getUserId();io
}編譯
}class
由於回滾的最大的異常只是 runtimeException,它就是運行期異常,若是 拋得是 exception譯異常,它比runtimeException還大,事務不把它當作 運行期異常了,能夠把它做爲編譯期異常了,因此事務不會回滾的啦。 若是代碼在執行的過程拋出了其餘異常 那麼通常也就是 運行期異常了,事務仍是會回滾的啦。 除非你 try catch捕獲了,沒有手動拋出異常,那麼也是不會回滾的,算編譯期異常了的