案例介紹
@Service
@RequiredArgsConstructor
public class A () {
private final UserService userService;
public void login(UserInfo user) {
UserInfo userInfo = userService.getByUsername(user.getUsername);
if (userInfo == null) {
userService.createUserInfo(userInfo);
}
int a = 1/0;
}
}
public interface UserInfoService {
UserInfo getByUsername(String username);
void createUserInfo(UserInfo userInfo);
}
問題描述:程式運作時,1/0導緻異常,程式運作中斷。
解決方案
引入@Transactional
@Service
@RequiredArgsConstructor
public class UserInfoServiceImpl implements UserInfoService {
private final UserInfoMapper userInfoMapper;
@Override
public UserInfo getByUsername(String username) {
return userInfoMapper.selectByUsername(username);
}
@Override
@Transactional
public void createUserInfo(UserInfo userInfo) {
userInfoMapper.insertUserInfo(userInfo);
}
}
設定手動復原
@Service
@RequiredArgsConstructor
public class A () {
private final UserService userService;
public void login(UserInfo user) {
try {
UserInfo userInfo = userService.getByUsername(user.getUsername);
if (userInfo == null) {
userService.createUserInfo(userInfo);
}
int a = 1/0;
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
}