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 변수 안에 보관
첫눈에 조금 복잡한 보일 것이다이 구현 사용법은 투명하게 보입니다.