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);
List<IosTokenClient> userTokens = iosTokenClientMapper.selectByExample(example);
if (userTokens.size() == 0) {
// 不存在该UUID
throw new LyecSystemException("2");// 令牌失效
} else {
Date addTime = userTokens.get(0).getAddTime();
Date nowTime = new Date();
// 判断时间是否相差过15天,超过15天无效
if (((nowTime.getTime() - addTime.getTime()) / (24 * 60 * 60 * 1000)) > 15) {
// 同时需要删除该 过时的token
iosTokenClientMapper.deleteByPrimaryKey(userTokens.get(0).getId());
throw new Exception("2");// 这样也是不会回滚的,因为 exception
// 比runtimeException大
} else {
return userTokens.get(0).getUserId();
}
}
因为回滚的最大的异常只是 runtimeException,它就是运行期异常,如果 抛得是 exception译异常,它比runtimeException还大,事务不把它当做 运行期异常了,可以把它作为编译期异常了,所以事务不会回滚的啦。 如果代码在执行的过程抛出了其他异常 那么一般也就是 运行期异常了,事务还是会回滚的啦。 除非你 try catch捕获了,没有手动抛出异常,那么也是不会回滚的,算编译期异常了的