토비의 스프링 3.1 vol.1 chap 6장 AOP를 읽으면서 궁금한게 생겼다.
PlatformTransactionManager에 DefaultTransactionDefinition를 넣어서 작동시킨다고 이해를 했다.
이떄 DefaultTransactionDefinition에 전파속성과 격리수준, 제한시간 읽기등 다양한 속성값을 넣을 수 있다고 생각하는데
과연 디폴트 전파,격리수준은 무엇일까? 라고 생각을 했다.
전파속성은 TransactionDefinition.PROPAGATION_REQUIRED로 설정되어
이미 트랜잭션이 있으면 새 트랜잭션을 생성하면 부모트랜잭션에 참여시키도록 한다.
트랜잭션이 없으면 새로 만든다.
격리수준은 MySQL에서 테이블을 만들었을 때 별도로 격리 수준을 지정하지 않으면,
사용되는 건 MySQL 서버의 기본 트랜잭션 격리 수준이라고 한다.
mysql의 기본 격리 수준은 REPEATABLE READ이다.
격리수준의 테이블을 다시 한번 보며 외우자.
| 격리 수준 | Dirty Read | Non-Repeatable Read | Phantom Read |
| ---------------- | ---------- | ------------------- | -------------------------------- |
| READ UNCOMMITTED | 발생 | 발생 | 발생 |
| READ COMMITTED | 방지 | 발생 | 발생 |
| REPEATABLE READ | 방지 | 방지 | (일반 SQL 표준에서는 발생 가능, InnoDB는 방지) |
| SERIALIZABLE | 방지 | 방지 | 방지 |
일단 또 까먹어서 적으면 innoDB는 엔진이며, 트랜잭션 지원한다.
마지막으로
전파수준은 spring에서 정하는 것이며, 격리수준은 DB에서 정하는 것이다.