diff --git a/multi-tenant-datasource/build.gradle b/multi-tenant-datasource/build.gradle
index 09ed014..bc2a812 100644
--- a/multi-tenant-datasource/build.gradle
+++ b/multi-tenant-datasource/build.gradle
@@ -17,7 +17,7 @@
 }
 
 dependencies {
-    implementation(":multi-tenant-core")
+    implementation project(":multi-tenant-core")
     implementation "org.springframework.boot:spring-boot-autoconfigure"
     implementation "commons-beanutils:commons-beanutils:${beanutilsVersion}"
     implementation "commons-codec:commons-codec:${codecVersion}"
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantConnectionProviderImpl.java b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantConnectionProviderImpl.java
new file mode 100644
index 0000000..737cba0
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantConnectionProviderImpl.java
@@ -0,0 +1,79 @@
+package com.supwisdom.multitenant.datasource;
+
+import com.supwisdom.multitenant.TenantContextHolder;
+import com.supwisdom.multitenant.TenantDetails;
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.HibernateException;
+import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+/**
+ * Created by shuwei on 2018/12/4.
+ */
+@Slf4j
+@Component
+public class MultiTenantConnectionProviderImpl implements MultiTenantConnectionProvider {
+  private final DataSource dataSource;
+
+  private final MultiTenantDataSourceProvider dsProvider;
+
+  public MultiTenantConnectionProviderImpl(DataSource dataSource,
+                                           MultiTenantDataSourceProvider provider) {
+    this.dataSource = dataSource;
+    this.dsProvider = provider;
+  }
+
+  @Override
+  public Connection getAnyConnection() throws SQLException {
+    return dataSource.getConnection();
+  }
+
+  @Override
+  public void releaseAnyConnection(Connection connection) throws SQLException {
+    connection.close();
+  }
+
+  @Override
+  public Connection getConnection(String ti) throws SQLException {
+    TenantDetails tenant = TenantContextHolder.getContext().getTenant();
+    final Connection connection = getAnyConnection();
+    try {
+      if (tenant != null) {
+        log.debug("postgresql set search path to  <" + tenant.getDbSchema() + ">");
+        connection.createStatement().execute(dsProvider.getTenantSQL(tenant));
+      } else {
+        log.debug("postgresql set search path to public");
+        connection.createStatement().execute(dsProvider.getDefaultSQL());
+      }
+    } catch (SQLException e) {
+      assert tenant != null;
+      throw new HibernateException("Problem setting schema to " + tenant.toString(), e);
+    }
+    return connection;
+  }
+
+  @Override
+  public void releaseConnection(String tenantIdentifier, Connection connection) throws SQLException {
+    connection.close();
+  }
+
+  @Override
+  public boolean supportsAggressiveRelease() {
+    return false;
+  }
+
+  @SuppressWarnings("rawtypes")
+  @Override
+  public boolean isUnwrappableAs(Class unwrapType) {
+    return false;
+  }
+
+  @Override
+  public <T> T unwrap(Class<T> unwrapType) {
+    return null;
+  }
+}
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantDataSourceProvider.java b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantDataSourceProvider.java
new file mode 100644
index 0000000..394b743
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantDataSourceProvider.java
@@ -0,0 +1,9 @@
+package com.supwisdom.multitenant.datasource;
+
+import com.supwisdom.multitenant.TenantDetails;
+
+public interface MultiTenantDataSourceProvider {
+  String getDefaultSQL();
+
+  String getTenantSQL(TenantDetails details);
+}
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantFactory.java b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantFactory.java
new file mode 100644
index 0000000..6706bd1
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantFactory.java
@@ -0,0 +1,7 @@
+package com.supwisdom.multitenant.datasource;
+
+import com.supwisdom.multitenant.datasource.beans.TenantProps;
+
+public interface MultiTenantFactory {
+  TenantProps createMultiTenant();
+}
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/beans/TenantProps.java b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/beans/TenantProps.java
new file mode 100644
index 0000000..5e0b6da
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/beans/TenantProps.java
@@ -0,0 +1,5 @@
+package com.supwisdom.multitenant.datasource.beans;
+
+public class TenantProps {
+  private String schema;
+}
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/config/MultiTenantDataSourceAutoConfiguration.java b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/config/MultiTenantDataSourceAutoConfiguration.java
new file mode 100644
index 0000000..db0c5f7
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/config/MultiTenantDataSourceAutoConfiguration.java
@@ -0,0 +1,22 @@
+package com.supwisdom.multitenant.datasource.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
+import org.springframework.core.type.AnnotationMetadata;
+
+@Configuration
+public class MultiTenantDataSourceAutoConfiguration implements ImportBeanDefinitionRegistrar {
+
+  @Value("${spring.jpa.database-platform:all}")
+  private String datasourcePlatform;
+
+  @Override
+  public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
+//    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
+//    beanDefinition.setBeanClass();
+//    registry.registerBeanDefinition();
+  }
+
+}
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/config/HibernateConfig.java b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/config/MutliTenantHibernateConfig.java
similarity index 84%
rename from multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/config/HibernateConfig.java
rename to multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/config/MutliTenantHibernateConfig.java
index 3365265..87be5f6 100644
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/config/HibernateConfig.java
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/config/MutliTenantHibernateConfig.java
@@ -1,12 +1,14 @@
-package com.supwisdom.payapi.multitenant.config;
+package com.supwisdom.multitenant.datasource.config;
 
 
+import com.supwisdom.multitenant.MultiTenantAutoConfiguration;
 import lombok.extern.slf4j.Slf4j;
 import org.hibernate.MultiTenancyStrategy;
 import org.hibernate.cfg.Environment;
 import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
 import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
 import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
 import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
@@ -21,15 +23,16 @@
 import java.util.Map;
 
 @Configuration
+@ConditionalOnBean({MultiTenantAutoConfiguration.class})
 @Slf4j
-public class HibernateConfig {
+public class MutliTenantHibernateConfig {
 
   private final JpaProperties jpaProperties;
 
   private final HibernateProperties hibernateProperties;
 
-  public HibernateConfig(@Autowired JpaProperties jpaProperties,
-                         HibernateProperties hibernateProperties) {
+  public MutliTenantHibernateConfig(@Autowired JpaProperties jpaProperties,
+                                    HibernateProperties hibernateProperties) {
     this.jpaProperties = jpaProperties;
     this.hibernateProperties = hibernateProperties;
   }
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/impl/PostgresDataSourceProvider.java b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/impl/PostgresDataSourceProvider.java
new file mode 100644
index 0000000..19305ef
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/impl/PostgresDataSourceProvider.java
@@ -0,0 +1,25 @@
+package com.supwisdom.multitenant.datasource.impl;
+
+import com.supwisdom.multitenant.TenantDetails;
+import com.supwisdom.multitenant.datasource.MultiTenantDataSourceProvider;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.util.StringUtils;
+
+@Configuration
+@ConditionalOnExpression("${spring.jpa.database-platform:postgresql}")
+public class PostgresDataSourceProvider implements MultiTenantDataSourceProvider {
+  @Override
+  public String getTenantSQL(TenantDetails details) {
+    if (details == null || details.getDbSchema() == null
+        || StringUtils.isEmpty(details.getDbSchema())) {
+      return getDefaultSQL();
+    }
+    return String.format("set search_path \"%s\", public; ", details.getDbSchema());
+  }
+
+  @Override
+  public String getDefaultSQL() {
+    return "set search_path public;";
+  }
+}
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/DefaultMultiTenantFactory.java b/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/DefaultMultiTenantFactory.java
deleted file mode 100644
index 898e647..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/DefaultMultiTenantFactory.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.supwisdom.payapi.multitenant;
-
-public class DefaultMultiTenantFactory implements MultiTenantFactory {
-}
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/MultiTenantFactory.java b/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/MultiTenantFactory.java
deleted file mode 100644
index 1c829f8..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/MultiTenantFactory.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.supwisdom.payapi.multitenant;
-
-public interface MultiTenantFactory {
-
-}
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/TenantContext.java b/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/TenantContext.java
deleted file mode 100644
index 4236e29..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/TenantContext.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.supwisdom.payapi.multitenant;
-
-import com.supwisdom.payapi.multitenant.beans.TenantProps;
-
-public class TenantContext {
-  private static final ThreadLocal<TenantProps> tenantHolder = new ThreadLocal<>();
-
-  public static TenantProps getTenant() {
-    return tenantHolder.get();
-  }
-
-  public static void setTenant(String tenant) {
-
-  }
-}
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/beans/TenantProps.java b/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/beans/TenantProps.java
deleted file mode 100644
index 6e0abf8..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/beans/TenantProps.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.supwisdom.payapi.multitenant.beans;
-
-public class TenantProps {
-}
diff --git a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/config/MultiTenantAutoConfiguration.java b/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/config/MultiTenantAutoConfiguration.java
deleted file mode 100644
index 718d869..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/config/MultiTenantAutoConfiguration.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.supwisdom.payapi.multitenant.config;
-
-import com.supwisdom.payapi.multitenant.DefaultMultiTenantFactory;
-import com.supwisdom.payapi.multitenant.MultiTenantFactory;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class MultiTenantAutoConfiguration {
-  @Bean
-  @ConditionalOnMissingBean(MultiTenantFactory.class)
-  public MultiTenantFactory createFactory() {
-    return new DefaultMultiTenantFactory();
-  }
-}
diff --git a/multi-tenant-datasource/src/test/java/com/supwisdom/multitenant/datasource/PgDatasourceTest.java b/multi-tenant-datasource/src/test/java/com/supwisdom/multitenant/datasource/PgDatasourceTest.java
new file mode 100644
index 0000000..7aae07a
--- /dev/null
+++ b/multi-tenant-datasource/src/test/java/com/supwisdom/multitenant/datasource/PgDatasourceTest.java
@@ -0,0 +1,17 @@
+package com.supwisdom.multitenant.datasource;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+
+@SpringBootTest(classes = {PgDatasourceTest.class},
+    properties = {"multi-tenant.interceptor.httpsession.enabled=true",
+        "multi-tenant.interceptor.httpheader.enabled=true"})
+@TestPropertySource("/test-pg.properties")
+public class PgDatasourceTest {
+
+  @Test
+  public void connectDatasource() {
+
+  }
+}
diff --git a/multi-tenant-datasource/src/test/resources/test-pg.properties b/multi-tenant-datasource/src/test/resources/test-pg.properties
new file mode 100644
index 0000000..3613c3b
--- /dev/null
+++ b/multi-tenant-datasource/src/test/resources/test-pg.properties
@@ -0,0 +1,13 @@
+spring.main.banner-mode=off
+# create and drop tables and sequences, loads import.sql
+spring.jpa.hibernate.ddl-auto=update
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
+spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
+# Postgresql settings
+spring.datasource.platform=postgresql
+#spring.datasource.url=jdbc:postgresql://ykt.supwisdom.com:15432/payapidev
+spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/payapidev
+spring.datasource.username=payapi
+spring.datasource.password=123456
+spring.datasource.continue-on-error=true
+spring.datasource.initialization-mode=always
\ No newline at end of file
