spring 트 랜 잭 션 특성 테스트 에서 발 견 된 문제

spring 트 랜 잭 션 전파 특성 테스트:
  
    @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 사 무 를 사용 하 는 방법 을 사용 할 때 호출 된 방법의 사 무 는 유효 하지 않 습 니 다. 그런데 왜 일 까요?아직 답 을 찾 을 단 서 를 찾 지 못 했 습 니 다!

좋은 웹페이지 즐겨찾기