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)
+    }
+}
