[java] Guice-Persist를 사용하여 여러 개의 데이터소스를 다루는 방법은?
  1. persistence.xml 설정 파일 작성: 각 데이터소스별로 별도의 persistence.xml 설정 파일을 작성합니다. 각 설정 파일은 고유한 persistence-unit 이름을 가져야 합니다. 예를 들어, persistence-unit 이름이 datasource1인 설정 파일과 datasource2인 설정 파일을 작성합니다.

  2. 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);
    }
}
  1. 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를 가져와 사용할 수 있습니다.