diff --git a/multi-tenant-datasource/build.gradle b/multi-tenant-datasource/build.gradle
new file mode 100644
index 0000000..09ed014
--- /dev/null
+++ b/multi-tenant-datasource/build.gradle
@@ -0,0 +1,29 @@
+plugins {
+    id "java-library"
+    id "org.springframework.boot"
+}
+
+jar {
+    enabled = true
+    archiveFileName = "${project.name}-${buildVersion}.${archiveExtension.getOrElse('.jar')}"
+    manifest {
+        attributes('Implementation-Title': project.name,
+                'Implementation-Version': buildVersion)
+    }
+}
+println("Build Version: $buildVersion")
+bootJar {
+    enabled = false
+}
+
+dependencies {
+    implementation(":multi-tenant-core")
+    implementation "org.springframework.boot:spring-boot-autoconfigure"
+    implementation "commons-beanutils:commons-beanutils:${beanutilsVersion}"
+    implementation "commons-codec:commons-codec:${codecVersion}"
+    implementation "org.apache.commons:commons-lang3:${lang3Version}"
+
+    compileOnly "org.projectlombok:lombok:${lombokVersion}"
+    annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
+}
+
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
new file mode 100644
index 0000000..898e647
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/DefaultMultiTenantFactory.java
@@ -0,0 +1,4 @@
+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
new file mode 100644
index 0000000..1c829f8
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/MultiTenantFactory.java
@@ -0,0 +1,5 @@
+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
new file mode 100644
index 0000000..4236e29
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/TenantContext.java
@@ -0,0 +1,15 @@
+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
new file mode 100644
index 0000000..6e0abf8
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/beans/TenantProps.java
@@ -0,0 +1,4 @@
+package com.supwisdom.payapi.multitenant.beans;
+
+public class TenantProps {
+}
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/payapi/multitenant/config/HibernateConfig.java
new file mode 100644
index 0000000..3365265
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/config/HibernateConfig.java
@@ -0,0 +1,65 @@
+package com.supwisdom.payapi.multitenant.config;
+
+
+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.orm.jpa.HibernateProperties;
+import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
+import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.orm.jpa.JpaVendorAdapter;
+import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
+
+import javax.sql.DataSource;
+import java.util.HashMap;
+import java.util.Map;
+
+@Configuration
+@Slf4j
+public class HibernateConfig {
+
+  private final JpaProperties jpaProperties;
+
+  private final HibernateProperties hibernateProperties;
+
+  public HibernateConfig(@Autowired JpaProperties jpaProperties,
+                         HibernateProperties hibernateProperties) {
+    this.jpaProperties = jpaProperties;
+    this.hibernateProperties = hibernateProperties;
+  }
+
+  @Bean
+  public JpaVendorAdapter getJpaVendorAdapter() {
+    HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
+    adapter.setGenerateDdl(true);
+    return adapter;
+  }
+
+  @Bean("entityManagerFactory")
+  public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource dataSource,
+                                                                         MultiTenantConnectionProvider multiTenantConnectionProvider,
+                                                                         CurrentTenantIdentifierResolver currentTenantIdentifierResolver) {
+    Map<String, Object> properties = new HashMap<>();
+    properties.putAll(hibernateProperties
+        .determineHibernateProperties(jpaProperties.getProperties(),
+            new HibernateSettings()));
+    properties.put(Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
+    properties.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProvider);
+    properties.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolver);
+
+    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
+    em.setDataSource(dataSource);
+    em.setPackagesToScan("com.supwisdom");
+    em.setJpaPropertyMap(properties);
+    em.setJpaVendorAdapter(getJpaVendorAdapter());
+    log.info("setup multi-tenant entityManagerFactor");
+    return em;
+  }
+
+}
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
new file mode 100644
index 0000000..718d869
--- /dev/null
+++ b/multi-tenant-datasource/src/main/java/com/supwisdom/payapi/multitenant/config/MultiTenantAutoConfiguration.java
@@ -0,0 +1,16 @@
+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();
+  }
+}
