try-catch 가 이상 정 보 를 캡 처 한 후 Spring 업무 가 실 효 된 문 제 를 해결 합 니 다.
@Transactional(rollbackFor=Exception.class) // Spring
@Override
public CommonResult<User> saveUser(User user) {
int insert = baseMapper.insert(user);
try {
// ,
int a = 10/0;
}catch (Exception e){
logger.info(" :"+e);
return CommonResult.commentFailure(" , ");
}
if(insert > 0){
return CommonResult.commentSuccess(user);
}else {
return CommonResult.commentFailure(" ");
}
}
1.정 보 를 추가 하 는 실현 방법 에 있어 서 저 희 는 Spring 의 업 무 를 추 가 했 습 니 다.2.문제:한 방법 으로 이상(int a=10/0)을 보고 하여 이상 캡 처 를 진행 하 였 으 며,다른 방법 은 스크롤 백 하지 않 습 니 다(insert 추가 방법)
이것 은 어떤 상황 입 니까?Spring 사무 전략 이 효력 을 잃 은 셈 입 니 다.
try-catch 가 이상 을 포착 한 후,이러한 업무 방법 은 spring 업무 의 관리 에서 벗 어 나 는 것 과 같 습 니 다.어떠한 이상 도 업무 방법 에서 던 져 지지 않 기 때문에 모두 캡 처 되 고'삼 키 기'되 어 spring 이상 이 트리거 트 랜 잭 션 스크롤 백 전략 이 효력 을 잃 게 됩 니 다.
일반적으로 기본 spring 사 무 는 캡 처 되 지 않 은 runtime excetpion 이나 error 가 발생 할 때 만 굴 러 갑 니 다.
처리 방안
spring op 이상 포획 후 스크롤 백.catch 에 마지막 으로 throw new runtime excetpion()을 추가 하면 프로그램 이 이상 할 때 op 에 잡 혀 스크롤 백 할 수 있 습 니 다.단점 은 return 이상 정보 알림 이 불가능 하고 전단 사용자 의 상호작용 효과 가 좋 지 않 습 니 다.
@Transactional(rollbackFor=Exception.class) // Spring
@Override
public CommonResult<User> saveUser(User user) {
int insert = baseMapper.insert(user);
try {
// ,
int a = 10/0;
}catch (Exception e){
logger.info(" :"+e);
// :spring aop
throw new RuntimeException();
}
if(insert > 0){
return CommonResult.commentSuccess(user);
}else {
return CommonResult.commentFailure(" ");
}
}
3.처리 방안 2하나의 방법 으로 이상 을 보고 하고 다른 방법 으로 스크롤 백 을 해 야 Spring 트 랜 잭 션 스크롤 백 전략 을 진정 으로 실행 할 수 있 습 니 다.
catch 구문 에 추가:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // ,
전체 코드:
@Transactional(rollbackFor=Exception.class) // Spring
@Override
public CommonResult<User> saveUser(User user) {
int insert = baseMapper.insert(user);
try {
// ,
int a = 10/0;
}catch (Exception e){
logger.info(" :"+e);
// :
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return CommonResult.commentFailure(" , ");
}
if(insert > 0){
return CommonResult.commentSuccess(user);
}else {
return CommonResult.commentFailure(" ");
}
}
4.수 동 으로 스크롤 백 을 해 야 하 는 업무 방법 이 비교적 많 으 면 우 리 는 공공 도구 류 를 쓸 수 있 습 니 다.SpringRollBackUtil.java
public class SpringRollBackUtil {
/**
*
*/
public static void rollBack() {
try {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
} catch (Exception e) {
e.printStackTrace();
}
}
}
호출 방법 만 있 으 면 된다.
// :
SpringRollBackUtil.rollBack();
Spring mvc:트 랜 잭 션 으로 인 한 try/catch 실효인 터 페 이 스 를 테스트 할 때 이상 한 현상 을 발견 합 니 다.
이 인 터 페 이 스 는@Response Body 주 해 를 사용 하여 json 형식 데 이 터 를 되 돌려 주 고 try/catch 를 사용 하여 모든 논리 코드 를 포함 합 니 다.debug 후 되 돌아 오 는 데 오류 가 없 음 을 발 견 했 습 니 다.이상 으로 인 한 오류 알림 문자열 만 포함 되 어 있 지만 chrome 브 라 우 저 network 는 http 상태 코드 를 500 으로 표시 합 니 다.
마지막 으로 이 RequestMapping 방법 에 주석 이 하나 더 있 음 을 발 견 했 습 니 다.@Transactional,ok 를 제거 합 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Access restrictionAccess restriction: The constructor Provider() is not accessible due to restriction on required library C:\Java\jdk1.6.0...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.