Spring @Transactional 주의사항 및 propagation( Required, Nested, Requires_new)차이에 대해서..
- Transactional사용시 주의사항 * junit에서 테스트용으로 돌리다 보면, 아래와 같은 케이스가 있는데 이럴 때 주의할 사항. -------------------------------- class A { @Transactional void aa() { } void bb() { aa(); } } -------------------------------- junit에서 위와 같이 transactional이 걸려있는 메소드(aa();)를 호출하는 메소드(bb())에 대해서 transaction 테스트를 하려고 하면 transaction이 정상동작하지 않음(rollback 안됨 현상)... (proxy기반이라 하나의 클래스의 진입점 transaction을 따르는 거 같음... @.@ ) 즉, 테스트 대상 bb();에 @Transactoinal이 걸려 있어야 하는 듯... - Propagation (기본적으로 spring propagation은 Exception을 기본으로 동작(즉, 내부에서 exception이 발생하는 것을 바탕으로 rollback할지 여부 결정하는 듯..)) * Required : 가장 기본 transaction으로 trasaction 연결이 하나의 connection안에서 동작하며, 계속해서 required가 붙으면 붙을 수록 각 요청을 기록해두었다가 하나라도 exception이 발생하면 모두 rollback되는 Propagation * nested : 제일 헷갈렸는데, nested로 기존 transaction안에서 실행되나, nested안에서 exception 발생시에는 자기것만 rollback하는 듯.. ( 단, 해당 exception을 내부 로직단에서 catch해서 뭔가 후처리가 있어야 함... 없으면 exception이 계속 상위로 전...