[SPRING] Spring + Hibernate + JPA + 다중 데이터베이스
SPRINGSpring + Hibernate + JPA + 다중 데이터베이스
나는 Spring + Hibernate + JPA 애플리케이션을 가지고있다. 사용자는 로그인 할 때 연결할 DB 목록에서 선택할 수 있습니다 (요구 사항). 모든 DB의 스키마는 동일하므로 동일한 엔티티와 DAO가 사용됩니다.
지금 당장 나는 하나의 EntityManager (DAO에 다음과 같이 주입 된 데이터베이스 하나를 가지고있다)가있다 :
@PersistenceContext
private EntityManager entityManager;
DAO가 서비스 계층으로부터받은 매개 변수 / 속성을 기반으로 자동으로 (Spring에 의해 관리되는) entityManager를 자동으로 수신하게하는 방법이 있습니까? (웹 레이어는 일종의 컨텍스트를 전송하고 선택된 데이터베이스의 이름 / 코드 / ID가 거기에있을 것입니다.)
아니면 내가 직접 관리해야합니까 (모든 entityManager를 만들어지도에 넣고 각 호출에 사용할 DAO 중 하나를 DAO에 알리는 것)?
나는 이것을 묻기 전에 약간의 연구를했지만 결과는 결론이 나지 않았다. 모델을 다루는 질문의 대부분은 2 개 이상의 DB와 여러 DB에 걸친 트랜잭션으로 퍼져 나갔다. 그러나 이것은 나에게 해당되지 않는다.
필자의 경우 일단 사용자가 연결되면 하나의 엔티티 관리자 만있는 응용 프로그램에 연결 한 것과 같습니다. 하나는 선택한 데이터베이스의 엔티티 관리자입니다. DB의 중반 세션이나 다른 것들 사이에 전환이 없습니다.
고맙습니다.
해결법
-
==============================
1.이 기능을 멀티 테넌시라고합니다.
이 기능을 멀티 테넌시라고합니다.
Hibernate 4는 Spring에서 관리하는 EntityManager와 통합 될 수있을 지 확신 할 수 없지만이를 지원해야한다.
또는 ConnectionProvider 레벨 또는 DataSource 레벨에서 데이터베이스 연결 생성을 가로 채고 ThreadLocal 변수에 저장된 테넌트 식별자를 기반으로 적절한 데이터베이스를 선택하는 것이 가장 쉬운 방법입니다.
참조 :
-
==============================
2.Spring에서는 다음과 같이 Annotation 구성 (AnnotationWebConfiguration)을 사용하여 EntityManagerFactory를 동적으로 빌드 할 수 있습니다.
Spring에서는 다음과 같이 Annotation 구성 (AnnotationWebConfiguration)을 사용하여 EntityManagerFactory를 동적으로 빌드 할 수 있습니다.
@Configuration public class MyAppConfig{ public LocalContainerEntityManagerFactoryBean getEmf(){ LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean (); Datasource ds = new .... ; // HERE!! you can create and configure your datasource to point to whatever you need emf.setName("system_pu"); emf.setDatasource(ds); emf.setPackagesToScan(""); //optional if no persistence.xml is defined return emf; } }
from https://stackoverflow.com/questions/8703242/spring-hibernate-jpa-multiple-databases by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] application.yml에서 속성을 읽을 때 Spring 프로필이 무시됩니다. (0) | 2019.02.16 |
---|---|
[SPRING] Spring WebFlow Project의 서비스 레벨에서 junit 테스트를 실행하려고합니다. $ AssumptionViolatedException 가정 (0) | 2019.02.16 |
[SPRING] 독립 실행 형 응용 프로그램에서 Spring 사용 (0) | 2019.02.16 |
[SPRING] spring.datasource.type을 설정할 수 없습니다. (0) | 2019.02.16 |
[SPRING] Struts 2에서 WebSocket API 사용하기 (0) | 2019.02.16 |