SPRING/스프링

[스프링] 9. 트랜잭션 설정

추억을 백앤드하자 2021. 4. 17. 08:04
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