[java] Guice-Persist를 사용하여 여러 개의 데이터소스를 다루는 방법은?
-
persistence.xml
설정 파일 작성: 각 데이터소스별로 별도의persistence.xml
설정 파일을 작성합니다. 각 설정 파일은 고유한persistence-unit
이름을 가져야 합니다. 예를 들어,persistence-unit
이름이datasource1
인 설정 파일과datasource2
인 설정 파일을 작성합니다. -
PersistenceModule
클래스 작성: Guice의Module
인터페이스를 구현한PersistenceModule
클래스를 작성합니다. 이 클래스에서는Properties
객체에 데이터베이스 연결 정보를 설정한 후,JpaPersistModule
을 사용하여EntityManagerFactory
를 바인딩합니다. 예를 들어, 다음과 같이 작성할 수 있습니다:
import com.google.inject.AbstractModule;
import com.google.inject.persist.jpa.JpaPersistModule;
public class PersistenceModule extends AbstractModule {
@Override
protected void configure() {
Properties properties1 = new Properties();
// datasource1에 대한 연결 정보 설정
properties1.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/datasource1");
JpaPersistModule jpaPersistModule1 = new JpaPersistModule("datasource1");
jpaPersistModule1.properties(properties1);
install(jpaPersistModule1);
Properties properties2 = new Properties();
// datasource2에 대한 연결 정보 설정
properties2.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/datasource2");
JpaPersistModule jpaPersistModule2 = new JpaPersistModule("datasource2");
jpaPersistModule2.properties(properties2);
install(jpaPersistModule2);
}
}
- Guice Injector 설정: Guice
Injector
를 생성할 때PersistenceModule
을 추가합니다. 예를 들어, 다음과 같이 작성합니다:
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new PersistenceModule());
// 사용할 데이터소스를 선택하여 EntityManagerFactory를 가져옴
EntityManagerFactory emf1 = injector.getInstance(Key.get(EntityManagerFactory.class, Names.named("datasource1")));
EntityManagerFactory emf2 = injector.getInstance(Key.get(EntityManagerFactory.class, Names.named("datasource2")));
// 데이터 소스에 따라 EntityManager 사용
EntityManager em1 = emf1.createEntityManager();
EntityManager em2 = emf2.createEntityManager();
// 두 데이터소스를 사용하여 작업 수행
// ...
// 작업이 끝나면 EntityManager를 종료
em1.close();
em2.close();
}
}
위의 방법을 따라 여러 개의 데이터소스를 다루는 Guice-Persist를 사용할 수 있습니다. 각 데이터소스는 고유한 persistence-unit
이름과 연결 정보를 가지며, Guice Injector를 통해 필요한 데이터소스의 EntityManagerFactory
를 가져와 사용할 수 있습니다.