service裏面加了事務後,運行期異常和編譯期異常和exception的使用

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捕獲了,沒有手動拋出異常,那麼也是不會回滾的,算編譯期異常了的

相關文章
相關標籤/搜索