2016-07-04 2 views
1

하나의 프로젝트에 여러 개의 다른 데이터베이스를 구현하는 가장 좋은 방법은 Spring JdbcDaoSupport을 사용하는 것인가?Spring에서 다른 데이터베이스 사용하기 jdbcDaoSupport

다른 데이터 소스와 구문을 사용하는 DB가 여러 개 있습니다 (예 : MySQL & Postgres). 순수한 java-jdbc 프로젝트에서는 Factory Method와 Abstract Factory 패턴, 데이터베이스 간 전환을위한 공통 DAO 인터페이스가있는 여러 DAOimpl 클래스 (각 DB에 하나씩)를 사용했습니다. 이제 Spring-jdbc을 사용하고 비슷한 동작을 구현하려고합니다.

답변

0

2 년 전에 같은 문제에 직면했으며 마지막으로 "봄 맞춤 설정 범위"(http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-scopes-custom)를 기반으로 구현을 선택했습니다.

스프링 프레임 워크를 사용하면 동일한 bean 정의의 여러 인스턴스가 함께 공존 할 수 있습니다. 이들은 몇 가지 상황 설정과 만 다릅니다.
예를 들어,이 빈 정의는 "도메인"라는 사용자 지정 범위를 만들 경우

<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>

, 당신은 기반으로 여러 데이터 소스를 실체화 할 수있을 것입니다 현재 처리 HTTP 요청에 따라 다양한 loginAction 빈을 만듭니다 같은 bean 정의.
JndiObjectFactoryBean에 기반한 데이터 소스 빈 정의는 서블릿 컨테이너가 (web.xml 파일을 통해) 데이터베이스 연결을 관리하게한다. 그러나 Spring 속성을 사용하여 데이터 소스 이름을 변형해야합니다.
데이터베이스 트랜잭션 관리자와 같은 bean도이 범위로 표시되어야합니다.

다음은 HTTP 요청이 실행될 때마다 범위를 활성화해야합니다. 요청 URL의 접두어로 데이터 소스 이름을 정의하도록 제안 할 수 있습니다.

웹 프레임 워크의 대부분은 HTTP 요청을 가로 채기 때문에 요청을 처리하기 전에 예상 된 데이터 소스를 검색 할 수 있습니다.
다음, 생성 (또는 재사용) 선택한 데이터 소스에 특정한 콩의 집합을하고 (사용자 정의 범위 구현에 의존하는 것)이 ThreadLocal 변수 안에 보관

첫눈에 조금 복잡한 보일 것이다이 구현 사용법은 투명하게 보입니다.

관련 문제