728x90
반응형
SMALL

현재 두개의 테이블을 만들어 트랜잭션 테스트를 할 생각이다.
tbl_sample1 는500바이트 tbl_sample1 는 50바이트의
각자 다른 컬럼 수용값을 지정하였다.
#글자수가 50바이트가 넘어가는 insert 테스트
public interface Sample1Mapper {
@Insert("insert into tbl_sample1 (col1) values (#{data})")
public int insertCol1(String data);
}
public interface Sample2Mapper {
@Insert("insert into tbl_sample2 (col2) values (#{data})")
public int insertCol2(String data);
}
public class SampleTxServiceImpl implements SampleTxService{
@Setter(onMethod_= {@Autowired})
private Sample1Mapper mapper1;
@Setter(onMethod_= {@Autowired})
private Sample2Mapper mapper2;
@Override
public void addData(String value) {
log.info("mapper1..........................");
mapper1.insertCol1(value);
log.info("mapper2..........................");
mapper2.insertCol2(value);
log.info("end...........................");
}
}
테스트코드
public class SampleTxServiceTests {
@Setter(onMethod_= {@Autowired})
private SampleTxService service;
@Test
public void testLong() {
String str="Starry\r\n"+
"Starry night\r\n" +
"Paint your palette blue and grey\r\n"+
"Look out on a summer's day";
log.info(str.getBytes().length);
service.addData(str);
}
}

해당 오류와 함께


tbl_sample1 에만 데이터가 들어간것을 확인할수있고
이는 트랜잭션의 acid 원칙에 위배된다.
입금과 출금을 예로 들었을때
분명 사용자는 입금을 진행하였는데
입금대상 계좌에는 돈이 안들어오고 막상 사용자의 계좌는 돈이 빠져나간 이런 상황이 발생한것이다.
@Transactional 어노테이션을 적용하여 트랜잭션의 원칙을 지켜보자
기존 코드에서 추가
public class SampleTxServiceImpl implements SampleTxService{
@Setter(onMethod_= {@Autowired})
private Sample1Mapper mapper1;
@Setter(onMethod_= {@Autowired})
private Sample2Mapper mapper2;
@Transactional
@Override
public void addData(String value) {
log.info("mapper1..........................");
mapper1.insertCol1(value);
log.info("mapper2..........................");
mapper2.insertCol2(value);
log.info("end...........................");
}
}
테이블 비우고 다시 테스트를 진행하면 오류와 함께

적용이 안됨을 확인할 수 있다.
728x90
반응형
LIST
'SPRING > 스프링' 카테고리의 다른 글
| [스프링] 10. Quartz 라이브러리 (0) | 2021.04.24 |
|---|---|
| [스프링] 오류. org.springframework.web.context.ContextLoaderListener (0) | 2021.04.17 |
| [스프링] 8. 글 등록 중복 알람 문제(자바스크립트 관련)!! (0) | 2021.04.07 |
| [스프링]7. 스프링에서의 작동원리 (0) | 2021.04.02 |
| [스프링]6. @RequestMapping 어노테이션 사용 (0) | 2021.03.30 |