hibenate가 mysql 드라이버의 replication 을 사용하기 위해

mysql 드라이버에는 자체적으로 replication 기능이 존재하여 connection의 설정에 따라 master, slave로 연결을 분리 할 수 있습니다.

connection을 JDBC를 이용해 직접적으로 사용한다면 별 문제가 없지만 하이버네이트는 하나의 세션에서 read, write를 하므로 곤란한 상태가 됩니다.

그래서 배성혁님이 AOP를 이용해 interceptor를 만드셨습니다.

MySql Master Slave Replication 에서 Hibernate 사용하기 2

이 코드에서는 hibernate의 SessionFactory를 사용하는데 저는 jpa 구현체를 사용하면서 SessionFactory를 직접 빈으로 등록할 필요가 없어 EntityManagerFactory 를 가져다 작업하는 코드를 만들었습니다. @PersistenceContext 어노테이션을 이용해 EntityManager에서 현재 session을 가져옵니다.

connection() 메소드는 deprecated 상태라 doWork()를 사용하여 connection을 readOnly로 설정합니다.