From 6914dc90561c667945ffe59013a085accbbacf08 Mon Sep 17 00:00:00 2001 From: Tang Cheng Date: Thu, 27 Jun 2019 09:35:45 +0800 Subject: [PATCH] =?utf8?q?=E6=B5=8B=E8=AF=95=E5=A4=9A=E7=A7=9F=E6=88=B7?= =?utf8?q?=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- config/application-devel-pg.properties | 7 --- .../framework/tenant/HibernateConfig.java | 14 +++-- .../dlpay/framework/tenant/TenantContext.java | 18 +++--- .../com/supwisdom/dlpay/framework/tenant.kt | 56 ++++++++++++------- 4 files changed, 56 insertions(+), 39 deletions(-) diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties index fa168072..ec231409 100644 --- a/config/application-devel-pg.properties +++ b/config/application-devel-pg.properties @@ -8,7 +8,6 @@ spring.datasource.platform=postgresql spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/payapi spring.datasource.username=payapi spring.datasource.password=123456 -database.dbtype=postgresql # Redis settings redis.server=172.28.201.101 redis.port=16379 @@ -25,10 +24,4 @@ security.request.sign=false ################################################## ## quartz task scheduler shopbalance.updater.cron=- - -##################多租户配置 start################################ -#多租户时使用的配置,如果不是用多租户,以下可注释掉 -#spring.jpa.properties.hibernate.multiTenancy=DATABASE -#spring.jpa.properties.hibernate.tenant_identifier_resolver=com.supwisdom.dlpay.framework.tenant.MultiTenantIdentifierResolver -#spring.jpa.properties.hibernate.multi_tenant_connection_provider=com.supwisdom.dlpay.framework.tenant.MultiTenantConnectionProviderImpl ##################多租户配置 end################################ \ No newline at end of file diff --git a/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java b/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java index 947e0ab0..dcf68e81 100644 --- a/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java +++ b/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java @@ -33,10 +33,12 @@ public class HibernateConfig { @Bean public JpaVendorAdapter getJpaVendorAdapter() { - return new HibernateJpaVendorAdapter(); + HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); + adapter.setGenerateDdl(true); + return adapter; } - @Bean + @Bean("entityManagerFactory") public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource dataSource, MultiTenantConnectionProvider multiTenantConnectionProvider, CurrentTenantIdentifierResolver currentTenantIdentifierResolver) { @@ -56,8 +58,8 @@ public class HibernateConfig { return em; } - @Bean - public EntityManagerFactory entityManagerFactoryBean(LocalContainerEntityManagerFactoryBean localBean) { - return localBean.getNativeEntityManagerFactory(); - } +// @Bean +// public EntityManagerFactory entityManagerFactoryBean(LocalContainerEntityManagerFactoryBean localBean) { +// return localBean.getObject(); +// } } diff --git a/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantContext.java b/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantContext.java index bbee36ad..c1d4ca44 100644 --- a/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantContext.java +++ b/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantContext.java @@ -4,13 +4,17 @@ package com.supwisdom.dlpay.framework.tenant; * Created by shuwei on 2018/11/29. */ public class TenantContext { - private static ThreadLocal currentTenant = new ThreadLocal<>(); + private static ThreadLocal currentTenant = new ThreadLocal<>(); - public static void setTenantSchema(String tid) { - currentTenant.set(tid); - } + public static void setTenantSchema(String tid) { + currentTenant.set(tid); + } - public static String getTenantSchema() { - return currentTenant.get(); - } + public static String getTenantSchema() { + return currentTenant.get(); + } + + public static void clear() { + currentTenant.set(null); + } } diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt index 2990f19e..dc8bbe79 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt @@ -1,24 +1,42 @@ package com.supwisdom.dlpay.framework -import com.supwisdom.dlpay.framework.util.Constants -import org.springframework.core.annotation.Order -import javax.servlet.Filter -import javax.servlet.FilterChain -import javax.servlet.ServletRequest -import javax.servlet.ServletResponse -import javax.servlet.annotation.WebFilter -import javax.servlet.http.HttpServletRequest +import com.supwisdom.dlpay.framework.tenant.TenantInterceptor +import mu.KotlinLogging +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.context.annotation.Configuration +import org.springframework.web.servlet.config.annotation.InterceptorRegistry +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer +import javax.annotation.PostConstruct -@Order(1) -@WebFilter(filterName = "multi_tenant_filter", urlPatterns = ["/*"]) -class TenantNameFilter : Filter { - override fun doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) { - if (request is HttpServletRequest) { - request.getHeader(Constants.HEADER_TETANTID)?.also { - // set tanent datasource - } - } - chain.doFilter(request, response) +//@Order(1) +//@WebFilter(filterName = "multi_tenant_filter", urlPatterns = ["/*"]) +//class TenantNameFilter : Filter { +// override fun doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) { +// if (request is HttpServletRequest) { +// request.getHeader(Constants.HEADER_TETANTID)?.also { +// // set tanent datasource +// TenantContext.setTenantSchema(it) +// } ?: TenantContext.setTenantSchema("default") +// } +// chain.doFilter(request, response) +// } +//} + +@Configuration +class MultiTenantDatasourceConfiguration : WebMvcConfigurer { + + private val logger = KotlinLogging.logger { } + @Autowired + private lateinit var tenantInterceptor: TenantInterceptor + + @PostConstruct + fun post() { + logger.info("MultiTenantDatasourceConfiguration post constructor.") + } + + override fun addInterceptors(registry: InterceptorRegistry) { + logger.info("adding interceptor(s).") + registry.addInterceptor(tenantInterceptor) } -} \ No newline at end of file +} -- 2.17.1