spring 트 랜 잭 션 특성 테스트 에서 발 견 된 문제
3323 단어 봄 사무required전파 특성REQUIRES_NEW
@Override
@Transactional(propagation = Propagation.REQUIRED)
public void saveLoginInfo(String userName, String dateString, String result) {
// ( )
this.saveLoginInfoCall("2000040", "2013-09-10 00:00:00.000", "2000040| test|saveLoginInfo|big1");
// ( service )
this.storeServiceImpl.saveLoginInfoCall("2000040", "2013-09-10 00:00:00.000", "2000040| test|saveLoginInfo|big1|big2");
String sql = "INSERT INTO prc_mbl_usr_usg (slsprs_id, lgn_dtm, lgn_sts ) VALUES (" + "'" + userName + "'," + "'" + dateString + "'," + "'" + result + "')";
logger.info(sql);
this.baseDaoImpl.insert(sql);
int m = 0;
if (m == 0) {
throw new RuntimeException(" !");
}
this.baseDaoImpl.insert(sql);
}
이러한 방법 은 saveLoginInfoCall 과 store ServiceImpl 류 의 방법 이 일치 합 니 다.
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveLoginInfoCall(String userName, String dateString, String result) {
String sql = "INSERT INTO prc_mbl_usr_usg (slsprs_id, lgn_dtm, lgn_sts ) VALUES (" + "'" + userName + "'," + "'" + dateString + "'," + "'" + result + "')";
logger.info(sql);
this.baseDaoImpl.insert(sql);
int m = 0;
// if (m == 0) {
// throw new RuntimeException(" !");
// }
this.baseDaoImpl.insert(sql);
}
테스트 코드:
@Test
public void testTransaction() {
System.out.println(AopUtils.isAopProxy(loginServiceImpl));
System.out.println(loginServiceImpl.getClass().getName());
loginServiceImpl.saveLoginInfo("2000040", "2013-09-10 00:00:00.000", "2000040| test|saveLoginInfo");
}
설명: saveLoginInfo () 방법 이 있 는 종 류 는 loginServiceImpl 입 니 다.
테스트 를 통 해 saveLoginInfo () 방법 이 이 클래스 의 saveLoginInfoCall () 방법 을 호출 한 후에 이상 을 던 진 것 으로 나 타 났 습 니 다. 이 클래스 의 방법 saveLoginInfoCall () 은 데이터 베 이 스 를 삽입 하지 않 았 고 storeServiceImpl 류 의 saveLoginInfoCall () 방법 은 데이터 베 이 스 를 삽입 한 것 으로 나 타 났 습 니 다.REQUIRESNEW 사물 의 전파 특성 에 있어 서 두 가지 방법의 출입 은 모두 성공 할 수 있어 야 한다.하지만 이 클래스 를 호출 하 는 방법 은 성공 하지 못 한 것 입 니 다!
그 다음 에 계속 테스트 를 한 다음 에 본 클래스 와 storeServiceImpl 클래스 의 방법 인 saveLoginInfoCall () 의 사무 주 해 를 모두 NEVER 로 바 꾼 다음 에 테스트 를 한 결과 본 클래스 의 방법 인 saveLoginInfoCall () 을 실행 할 때 오류 가 발생 하지 않 고 storeServiceImpl 류 의 saveLoginInfoCall () 방법 을 실행 할 때 오류 가 발생 했 습 니 다. NEVER 를 설치 하 는 전파 특성 에 있어 서 는...이 클래스 의 saveLoginInfoCall () 방법 을 실행 할 때 오류 가 발생 합 니 다 (NEVER 트 랜 잭 션 전파 특성 은 트 랜 잭 션 을 지원 하지 않 으 며, 트 랜 잭 션 이 있 으 면 이상 을 던 집 니 다)
위의 요약 에 따 르 면 하나의 방법 으로 spring 사 무 를 사용 할 때 같은 종류의 다른 spring 사 무 를 사용 하 는 방법 을 사용 할 때 호출 된 방법의 사 무 는 유효 하지 않 습 니 다. 그런데 왜 일 까요?아직 답 을 찾 을 단 서 를 찾 지 못 했 습 니 다!