测试多租户机制
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index fa16807..ec23140 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -8,7 +8,6 @@
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 @@
##################################################
## 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 947e0ab..dcf68e8 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 @@
@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 @@
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 bbee36a..c1d4ca4 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 @@
* Created by shuwei on 2018/11/29.
*/
public class TenantContext {
- private static ThreadLocal<String> currentTenant = new ThreadLocal<>();
+ private static ThreadLocal<String> 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 2990f19..dc8bbe7 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.")
}
-}
\ No newline at end of file
+
+ override fun addInterceptors(registry: InterceptorRegistry) {
+ logger.info("adding interceptor(s).")
+ registry.addInterceptor(tenantInterceptor)
+ }
+}