[SPRING] 최대 절전 모드에서 다중 테넌트를 위해 다중 데이터 소스를 구성하는 방법
SPRING최대 절전 모드에서 다중 테넌트를 위해 다중 데이터 소스를 구성하는 방법
이 웹 세미나에서 설명한대로 별도의 스키마 접근 방식을 사용하여 Java 응용 프로그램에 다중 테넌트를 추가하려고합니다.
나는 아마도 속성 파일을 사용하여 봄을 통해 여러 데이터 소스를 구성하고 세입자 ID를 기반으로 봄 컨텍스트에서 데이터 소스를 얻는 방법을 알고 싶었습니다.
가장 중요한 것은, 비록이 다중 테넌트 기능이 Hibernate가 기본적으로 사용하는 삽입 된 ConnectionProvider 대신에 사용되도록 지원하는 사용자 정의 연결 제공자 구현을 구성 할 수 있기를 원한다.
어떻게하면 이럴 수 있겠 어.
해결법
-
==============================
1.AbstractRoutingDataSource를 사용하십시오. 둘 이상의 데이터 소스를 사용할 때 Spring의 @ Entity Manager 문제에있는 내 대답을 참조하십시오.
AbstractRoutingDataSource를 사용하십시오. 둘 이상의 데이터 소스를 사용할 때 Spring의 @ Entity Manager 문제에있는 내 대답을 참조하십시오.
-
==============================
2.이 게시물은 Spring Security와 AbstractRoutingDataSource를 사용하여 Multi-Tenancy SaaS 애플리케이션을 구축하는 방법을 보여줍니다. 다중 사용자 SaaS 애플리케이션 보호를위한 Spring 보안 확장
이 게시물은 Spring Security와 AbstractRoutingDataSource를 사용하여 Multi-Tenancy SaaS 애플리케이션을 구축하는 방법을 보여줍니다. 다중 사용자 SaaS 애플리케이션 보호를위한 Spring 보안 확장
-
==============================
3.ConnectionProvider에 의한 멀티 테넌시를 원한다면 문맥을 제공하기 위해 스레드 로컬이 필요합니다. 이 간단한 실행을 참조하십시오.
ConnectionProvider에 의한 멀티 테넌시를 원한다면 문맥을 제공하기 위해 스레드 로컬이 필요합니다. 이 간단한 실행을 참조하십시오.
http://literatejava.com/hibernate/multi-tenancy-architecture-with-hibernate/
-
==============================
4.이 기사에서 설명했듯이 다음과 같이 구현할 수있는 MultiTenancyConnectionProvider를 통해 Hibernate에서 라우팅을 수행 할 수 있습니다.
이 기사에서 설명했듯이 다음과 같이 구현할 수있는 MultiTenancyConnectionProvider를 통해 Hibernate에서 라우팅을 수행 할 수 있습니다.
public class MultiTenantConnectionProvider extends AbstractMultiTenantConnectionProvider { public static final MultiTenantConnectionProvider INSTANCE = new MultiTenantConnectionProvider(); private final Map<String, ConnectionProvider> connectionProviderMap = new HashMap<>(); Map<String, ConnectionProvider> getConnectionProviderMap() { return connectionProviderMap; } @Override protected ConnectionProvider getAnyConnectionProvider() { return connectionProviderMap.get( TenantContext.DEFAULT_TENANT_IDENTIFIER ); } @Override protected ConnectionProvider selectConnectionProvider( String tenantIdentifier) { return connectionProviderMap.get( tenantIdentifier ); } }
각 임차인이 전용 DataSource를 사용한다고 가정하면 다음과 같은 유틸리티 메소드를 사용하여 개별 ConnectionProviders를 등록 할 수 있습니다.
private void addTenantConnectionProvider( String tenantId, DataSource tenantDataSource, Properties properties) { DatasourceConnectionProviderImpl connectionProvider = new DatasourceConnectionProviderImpl(); connectionProvider.setDataSource(tenantDataSource); connectionProvider.configure(properties); MultiTenantConnectionProvider.INSTANCE .getConnectionProviderMap() .put( tenantId, connectionProvider ); }
관리자 관련 작업에 대한 기본 테넌트를 등록 할 수 있습니다.
addTenantConnectionProvider( TenantContext.DEFAULT_TENANT_IDENTIFIER, defaultDataSource, properties() );
실제 임차인은 다음과 같은 방법을 사용할 수 있습니다.
private void addTenantConnectionProvider( String tenantId) { DataSourceProvider dataSourceProvider = database() .dataSourceProvider(); Properties properties = properties(); MysqlDataSource tenantDataSource = new MysqlDataSource(); tenantDataSource.setDatabaseName(tenantId); tenantDataSource.setUser(dataSourceProvider.username()); tenantDataSource.setPassword(dataSourceProvider.password()); properties.put( Environment.DATASOURCE, dataSourceProxyType().dataSource(tenantDataSource) ); addTenantConnectionProvider( tenantId, tenantDataSource, properties ); }
MysqlDataSource를 사용중인 데이터베이스로 변경할 수 있습니다.
그런 다음 세입자를 등록하는 것은 다음과 같이 간단합니다.
addTenantConnectionProvider("asia"); addTenantConnectionProvider("europe");
고려해야 할 마지막 사항은 hibernate.multi_tenant_connection_provider 구성 등록 정보를 통해 MultiTenancyConnectionProvider 구현을 Hibernate에 제공하는 것입니다.
properties.put( AvailableSettings.MULTI_TENANT_CONNECTION_PROVIDER, MultiTenantConnectionProvider.INSTANCE );
from https://stackoverflow.com/questions/6804738/how-to-configure-multiple-datasources-for-multitenancy-in-hibernate by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] MyBatis RowBounds는 쿼리 결과를 제한하지 않습니다. (0) | 2019.03.13 |
---|---|
[SPRING] 스프링 보안 : API 용 JWT 토큰 및 웹용 세션 (0) | 2019.03.13 |
[SPRING] Spring 부트에서 0-legged OAuth 1.0 설정하기 (0) | 2019.03.13 |
[SPRING] 스프링 보안을 사용하여 프로그래밍 방식으로 사용자를 로그 아웃하는 방법 (0) | 2019.03.13 |
[SPRING] Spring bean 프라퍼티를 프라퍼티 파일에서 자동으로 새로 고친다. (0) | 2019.03.13 |