2014-11-14 10 views
0

풀에서 체크인 및 체크 아웃 할 때 데이터베이스를 전환해야합니다. 예를 들어, 세션 X는 데이터베이스 A에 대한 연결을 받아야하고 세션 Y는 데이터베이스 B에 대한 연결을 받아야합니다.HikariCP - 연결 풀에서 연결 체크인 및 체크 아웃시 연결된 데이터베이스를 동적으로 설정하기

연결 사용자 정의 프로그램을 사용하여 C3P0으로 처리 할 수 ​​있습니다. 이 방법 onCheckInAbstractConnectionCustomizeronCheckOut 호출, 그래서 나는 같은 것을 할 수있다 : 나는 에 HikariCP 전환하는 것을 시도하고있다

public class MyConnectionCustomizer extends AbstractConnectionCustomizer { 
    @Override 
    public void onCheckOut(Connection c, String parentDataSourceIdentityToken) throws Exception { 
     if (something) { 
      c.setCatalog("some database name"); 
     } 
    } 

    @Override 
    public void onCheckIn(Connection c, String parentDataSourceIdentityToken) throws Exception { 
     c.setCatalog("some other database name"); 
    } 
} 

을하지만 연결이 만들어 질 경우는 한 번만 IConnectionCustomizercustomize 메소드를 호출 . 그렇다면 어떻게 이러한 기능을 구현할 수 있습니까?

답변

2

이 경우의 사용 사례를 이해하려고합니다. 세션 X가 실제로 데이터베이스 A에 연결해야하고 세션 Y가 데이터베이스 B에 연결해야하는 경우 별도의 풀을 사용하지 않는 이유는 무엇입니까?

HikariCP는 그러한 기능을 결코 지원하지 않을 것입니다. (나는 저자 중 한 명으로 말할 수 있습니다). 연결 풀은 응용 프로그램에 완전히 투명한 DataSource를 제공해야합니다. 따라서 풀이 제거되고 원시 DataSource가 대신 사용되면 응용 프로그램은 동일하게 작동합니다 (효율성은 떨어짐).

C3P0에서 이와 같은 작업을 수행 할 수 있지만 HikariCP, Vibur 또는 Apache DBCP에서는 수행 할 수없는 사실은 적기입니다. 이러한 기능을 사용하면 특정 풀 구현에 빠질 수 있습니다. 이는 결코 좋은 일이 아닙니다.

죄송합니다. 행복한 답변을 드릴 수 없습니다. 만약 내가 당신이라면, 당신이 찾고있는 의미를 제공하는 연결을 얻거나 가져 오기 위해 애플리케이션 레벨 도우미 클래스를 작성하는 것을 고려할 것이다.

+0

특히 SaaS 마켓 플레이스 제품과 관련하여 많은 사용 사례가 있습니다. 살펴보실 수 있습니다 : https://docs.microsoft.com/en-us/azure/sql-database/saas-tenancy-app-design-patterns –

2

단일 사용 사례는 여러 스키마가있는 단일 데이터베이스가있는 다중 소유입니다. 애플리케이션에 로그인 한 세입자를 기반으로 스키마를 동적으로 전환해야합니다.