diff --git a/multi-tenant-core/build.gradle b/multi-tenant-core/build.gradle
deleted file mode 100644
index b456c6e..0000000
--- a/multi-tenant-core/build.gradle
+++ /dev/null
@@ -1,9 +0,0 @@
-plugins {
-    id 'java'
-    id 'org.springframework.boot'
-}
-
-dependencies {
-    implementation "org.springframework:spring-webmvc"
-    implementation "javax.servlet:javax.servlet-api:${javaxServletVersion}"
-}
\ No newline at end of file
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/HttpHeaderAutoRegistrar.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/HttpHeaderAutoRegistrar.java
deleted file mode 100644
index c18c009..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/HttpHeaderAutoRegistrar.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.supwisdom.multitenant;
-
-import com.supwisdom.multitenant.config.HttpHeaderWebMvcConfig;
-import com.supwisdom.multitenant.impl.HttpHeaderTenantInterceptor;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.support.BeanDefinitionRegistry;
-import org.springframework.beans.factory.support.GenericBeanDefinition;
-import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
-import org.springframework.core.type.AnnotationMetadata;
-
-public class HttpHeaderAutoRegistrar implements ImportBeanDefinitionRegistrar {
-  public static final String BEAN_NAME = "httpHeaderTenantInterceptor";
-
-  private void registerInterceptor(BeanDefinitionRegistry registry) {
-    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
-    beanDefinition.setBeanClass(HttpHeaderTenantInterceptor.class);
-    beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
-    registry.registerBeanDefinition(BEAN_NAME, beanDefinition);
-  }
-
-  private void registerMvcConfigure(BeanDefinitionRegistry registry) {
-    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
-    beanDefinition.setBeanClass(HttpHeaderWebMvcConfig.class);
-    beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
-    registry.registerBeanDefinition(BEAN_NAME + "MvcConfig", beanDefinition);
-  }
-
-  @Override
-  public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
-    registerInterceptor(registry);
-    registerMvcConfigure(registry);
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/HttpSessionAutoRegistrar.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/HttpSessionAutoRegistrar.java
deleted file mode 100644
index 4064aea..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/HttpSessionAutoRegistrar.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.supwisdom.multitenant;
-
-import com.supwisdom.multitenant.config.HttpSessionWebMvcConfig;
-import com.supwisdom.multitenant.impl.HttpSessionTenantInterceptor;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.support.BeanDefinitionRegistry;
-import org.springframework.beans.factory.support.GenericBeanDefinition;
-import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
-import org.springframework.core.type.AnnotationMetadata;
-
-public class HttpSessionAutoRegistrar implements ImportBeanDefinitionRegistrar {
-  public static final String BEAN_NAME = "httpSessionTenantInterceptor";
-
-  private void registerInterceptor(BeanDefinitionRegistry registry) {
-    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
-    beanDefinition.setBeanClass(HttpSessionTenantInterceptor.class);
-    beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
-    registry.registerBeanDefinition(BEAN_NAME, beanDefinition);
-}
-
-  private void registerMvcConfigurater(BeanDefinitionRegistry registry) {
-    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
-    beanDefinition.setBeanClass(HttpSessionWebMvcConfig.class);
-    beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
-    registry.registerBeanDefinition(BEAN_NAME + "MvcConfig", beanDefinition);
-  }
-
-  @Override
-  public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
-    registerInterceptor(registry);
-    registerMvcConfigurater(registry);
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/MultiTenantAutoConfiguration.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/MultiTenantAutoConfiguration.java
deleted file mode 100644
index 6a13357..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/MultiTenantAutoConfiguration.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.supwisdom.multitenant;
-
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Role;
-
-@Configuration
-@ComponentScan(basePackages = {"com.supwisdom.multitenant"})
-@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
-public class MultiTenantAutoConfiguration {
-
-  @Bean
-  @ConditionalOnMissingBean(TenantDetailsProvider.class)
-  public TenantDetailsProvider createDetailsProvider() {
-    return new TenantDetailsProvider() {
-    };
-  }
-
-  public static class SessionTenantInterceptorAutoConfig {
-  }
-
-//  @ConditionalOnProperty(
-//      name = "multi-tenant.interceptor.httpsession.enabled",
-//      havingValue = "true")
-//  @Bean
-//  @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
-//  public SessionTenantInterceptorAutoConfig sessionTenantInterceptorAutoConfig() {
-//    return new SessionTenantInterceptorAutoConfig();
-//  }
-
-
-  public static class HttpHeaderTenantInterceptorAutoConfig {
-  }
-
-//  @Bean
-//  @ConditionalOnProperty(
-//      name = "multi-tenant.interceptor.httpheader.enabled",
-//      havingValue = "true")
-//  @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
-//  public HttpHeaderTenantInterceptorAutoConfig httpHeaderTenantInterceptorAutoConfig() {
-//    return new HttpHeaderTenantInterceptorAutoConfig();
-//  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantContext.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantContext.java
deleted file mode 100644
index 0c3bbf2..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantContext.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.supwisdom.multitenant;
-
-import java.io.Serializable;
-
-public interface TenantContext extends Serializable {
-  TenantDetails getTenant();
-
-  void setTenant(TenantDetails details);
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantContextHolder.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantContextHolder.java
deleted file mode 100644
index bb0d51f..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantContextHolder.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.supwisdom.multitenant;
-
-import com.supwisdom.multitenant.impl.ThreadLocalTenantContextHolderStrategy;
-
-public class TenantContextHolder {
-  private static TenantContextHolderStrategy strategy;
-
-  static {
-    initialize();
-  }
-
-  private static void initialize() {
-    strategy = new ThreadLocalTenantContextHolderStrategy();
-  }
-
-  public static TenantContext getContext() {
-    return strategy.getContext();
-  }
-
-  public static void clearContext() {
-    strategy.clearContext();
-  }
-
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantContextHolderStrategy.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantContextHolderStrategy.java
deleted file mode 100644
index 300130a..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantContextHolderStrategy.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.supwisdom.multitenant;
-
-public interface TenantContextHolderStrategy {
-  TenantContext getContext();
-
-  void setContext(TenantContext tenant);
-
-  TenantContext createEmptyContext();
-
-  void clearContext();
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantDetails.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantDetails.java
deleted file mode 100644
index 07372bb..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantDetails.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.supwisdom.multitenant;
-
-import java.io.Serializable;
-
-public class TenantDetails implements Serializable {
-  private String id;
-
-  private String dbSchema;
-
-  private Boolean enabled;
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getDbSchema() {
-    return dbSchema;
-  }
-
-  public void setDbSchema(String dbSchema) {
-    this.dbSchema = dbSchema;
-  }
-
-  public Boolean getEnabled() {
-    return enabled;
-  }
-
-  public void setEnabled(Boolean enabled) {
-    this.enabled = enabled;
-  }
-
-  @Override
-  public boolean equals(Object obj) {
-    if (obj instanceof TenantDetails) {
-      TenantDetails other = (TenantDetails) obj;
-      if (getId().equals(other.getId())) {
-        return true;
-      }
-    }
-    return false;
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantDetailsProvider.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantDetailsProvider.java
deleted file mode 100644
index d8d9990..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantDetailsProvider.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.supwisdom.multitenant;
-
-public interface TenantDetailsProvider {
-  default TenantDetails createDetailsById(String id) {
-    TenantDetails details = new TenantDetails();
-    details.setId(id);
-    return details;
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantInterceptor.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantInterceptor.java
deleted file mode 100644
index 3a50249..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/TenantInterceptor.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.supwisdom.multitenant;
-
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-
-public abstract class TenantInterceptor extends HandlerInterceptorAdapter {
-
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/annotations/EnableHttpHeaderTenantInterceptor.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/annotations/EnableHttpHeaderTenantInterceptor.java
deleted file mode 100644
index daf9d4c..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/annotations/EnableHttpHeaderTenantInterceptor.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.supwisdom.multitenant.annotations;
-
-import com.supwisdom.multitenant.HttpHeaderAutoRegistrar;
-import com.supwisdom.multitenant.MultiTenantAutoConfiguration;
-import org.springframework.context.annotation.Import;
-
-import java.lang.annotation.*;
-
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-@Import({MultiTenantAutoConfiguration.class, HttpHeaderAutoRegistrar.class})
-@Documented
-public @interface EnableHttpHeaderTenantInterceptor {
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/annotations/EnableSessionTenantInterceptor.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/annotations/EnableSessionTenantInterceptor.java
deleted file mode 100644
index 347b58d..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/annotations/EnableSessionTenantInterceptor.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.supwisdom.multitenant.annotations;
-
-import com.supwisdom.multitenant.HttpSessionAutoRegistrar;
-import com.supwisdom.multitenant.MultiTenantAutoConfiguration;
-import org.springframework.context.annotation.Import;
-
-import java.lang.annotation.*;
-
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-@Import({MultiTenantAutoConfiguration.class, HttpSessionAutoRegistrar.class})
-@Documented
-public @interface EnableSessionTenantInterceptor {
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/condition/OnPgDatabase.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/condition/OnPgDatabase.java
deleted file mode 100644
index c09439d..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/condition/OnPgDatabase.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.supwisdom.multitenant.condition;
-
-import org.springframework.context.annotation.Condition;
-import org.springframework.context.annotation.ConditionContext;
-import org.springframework.core.type.AnnotatedTypeMetadata;
-
-public class OnPgDatabase implements Condition {
-  private static final String DATABASE_PLATFORM = "spring.jpa.database-platform";
-
-  @Override
-  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
-    String platform = context.getEnvironment().getProperty(DATABASE_PLATFORM, String.class);
-    return "postgresql".equals(platform);
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/HttpHeaderWebMvcConfig.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/HttpHeaderWebMvcConfig.java
deleted file mode 100644
index 0227a23..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/HttpHeaderWebMvcConfig.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.supwisdom.multitenant.config;
-
-
-import com.supwisdom.multitenant.impl.HttpHeaderTenantInterceptor;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
-public class HttpHeaderWebMvcConfig implements WebMvcConfigurer {
-  private final HttpHeaderTenantInterceptor interceptor;
-
-  public HttpHeaderWebMvcConfig(HttpHeaderTenantInterceptor interceptor) {
-    this.interceptor = interceptor;
-  }
-
-  @Override
-  public void addInterceptors(InterceptorRegistry registry) {
-    registry.addInterceptor(interceptor);
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/HttpSessionWebMvcConfig.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/HttpSessionWebMvcConfig.java
deleted file mode 100644
index c4d8030..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/HttpSessionWebMvcConfig.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.supwisdom.multitenant.config;
-
-import com.supwisdom.multitenant.impl.HttpSessionTenantInterceptor;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
-public class HttpSessionWebMvcConfig implements WebMvcConfigurer {
-  private final HttpSessionTenantInterceptor interceptor;
-
-  public HttpSessionWebMvcConfig(HttpSessionTenantInterceptor interceptor) {
-    this.interceptor = interceptor;
-  }
-
-  @Override
-  public void addInterceptors(InterceptorRegistry registry) {
-    registry.addInterceptor(interceptor);
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantCoreUtils.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantCoreUtils.java
deleted file mode 100644
index 97c7096..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantCoreUtils.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.supwisdom.multitenant.config;
-
-public final class TenantCoreUtils {
-  public static final String INTERNAL_TENANT_INTERCEPTOR_BEAN_NAME = "coms.supwisdom.multitenant.interceptor";
-
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantHeaderProperties.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantHeaderProperties.java
deleted file mode 100644
index 4d31390..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantHeaderProperties.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.supwisdom.multitenant.config;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-@Component
-@ConfigurationProperties("multi-tenant.header")
-public class TenantHeaderProperties {
-  @Value("${key:X-Tenant-Id}")
-  private String key;
-
-  public String getKey() {
-    return key;
-  }
-
-  public void setKey(String key) {
-    this.key = key;
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantJwtProperties.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantJwtProperties.java
deleted file mode 100644
index c4dcbb4..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantJwtProperties.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.supwisdom.multitenant.config;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-@Component
-@ConfigurationProperties("multi-tenant.jwt")
-public class TenantJwtProperties {
-  @Value("${header:Authentication}")
-  private String jwtHeader;
-
-  @Value("${schema:Bears}")
-  private String schema;
-
-  public String getJwtHeader() {
-    return jwtHeader;
-  }
-
-  public void setJwtHeader(String jwtHeader) {
-    this.jwtHeader = jwtHeader;
-  }
-
-  public String getSchema() {
-    return schema;
-  }
-
-  public void setSchema(String schema) {
-    this.schema = schema;
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantSessionProperties.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantSessionProperties.java
deleted file mode 100644
index 3d57c62..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/config/TenantSessionProperties.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.supwisdom.multitenant.config;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-@Component
-@ConfigurationProperties("multi-tenant.session")
-public class TenantSessionProperties {
-  @Value("${name:multi-tenant-id}")
-  private String name;
-
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/HttpHeaderTenantInterceptor.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/HttpHeaderTenantInterceptor.java
deleted file mode 100644
index 375eda0..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/HttpHeaderTenantInterceptor.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.supwisdom.multitenant.impl;
-
-import com.supwisdom.multitenant.TenantContextHolder;
-import com.supwisdom.multitenant.TenantDetails;
-import com.supwisdom.multitenant.TenantInterceptor;
-import com.supwisdom.multitenant.config.TenantHeaderProperties;
-import com.supwisdom.multitenant.config.TenantJwtProperties;
-import org.springframework.util.StringUtils;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class HttpHeaderTenantInterceptor extends TenantInterceptor {
-  private final TenantJwtProperties properties;
-
-  private final TenantHeaderProperties headerProperties;
-
-  public HttpHeaderTenantInterceptor(TenantJwtProperties properties,
-                                     TenantHeaderProperties headerProperties) {
-    this.properties = properties;
-    this.headerProperties = headerProperties;
-  }
-
-  @Override
-  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-    String tenant = request.getHeader(headerProperties.getKey());
-    if (tenant != null && !StringUtils.isEmpty(tenant)) {
-      TenantDetails details = new TenantDetails();
-      details.setId(tenant);
-      TenantContextHolder.getContext().setTenant(details);
-    }
-    String header = request.getHeader(properties.getJwtHeader());
-    if (header.startsWith(properties.getSchema())) {
-      // parse jwt
-    }
-    return super.preHandle(request, response, handler);
-  }
-
-  @Override
-  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
-                         ModelAndView modelAndView) throws Exception {
-    TenantContextHolder.clearContext();
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/HttpSessionTenantInterceptor.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/HttpSessionTenantInterceptor.java
deleted file mode 100644
index cb711e0..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/HttpSessionTenantInterceptor.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.supwisdom.multitenant.impl;
-
-import com.supwisdom.multitenant.TenantContextHolder;
-import com.supwisdom.multitenant.TenantDetails;
-import com.supwisdom.multitenant.TenantDetailsProvider;
-import com.supwisdom.multitenant.TenantInterceptor;
-import com.supwisdom.multitenant.config.TenantSessionProperties;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class HttpSessionTenantInterceptor extends TenantInterceptor {
-  private final TenantSessionProperties properties;
-
-  private final TenantDetailsProvider provider;
-
-  public HttpSessionTenantInterceptor(TenantSessionProperties properties,
-                                      TenantDetailsProvider provider) {
-    this.properties = properties;
-    this.provider = provider;
-  }
-
-  @Override
-  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-    Object details = request.getSession().getAttribute(properties.getName());
-    if (details != null) {
-      if (details instanceof TenantDetails) {
-        TenantContextHolder.getContext().setTenant((TenantDetails) details);
-      } else if (details instanceof String) {
-        TenantContextHolder.getContext().setTenant(provider.createDetailsById((String) details));
-      } else {
-        return false;
-      }
-    }
-    return super.preHandle(request, response, handler);
-  }
-
-  @Override
-  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
-                         ModelAndView modelAndView) throws Exception {
-    TenantContextHolder.clearContext();
-    super.postHandle(request, response, handler, modelAndView);
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/TenantContextImpl.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/TenantContextImpl.java
deleted file mode 100644
index 39bdae8..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/TenantContextImpl.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.supwisdom.multitenant.impl;
-
-import com.supwisdom.multitenant.TenantContext;
-import com.supwisdom.multitenant.TenantDetails;
-
-public class TenantContextImpl implements TenantContext {
-  private TenantDetails details;
-
-  @Override
-  public TenantDetails getTenant() {
-    return details;
-  }
-
-  @Override
-  public void setTenant(TenantDetails details) {
-    this.details = details;
-  }
-
-  @Override
-  public boolean equals(Object obj) {
-    if (obj instanceof TenantContextImpl) {
-      TenantContextImpl other = (TenantContextImpl) obj;
-      getTenant().equals(other.getTenant());
-    }
-    return false;
-  }
-}
diff --git a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/ThreadLocalTenantContextHolderStrategy.java b/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/ThreadLocalTenantContextHolderStrategy.java
deleted file mode 100644
index fd325ec..0000000
--- a/multi-tenant-core/src/main/java/com/supwisdom/multitenant/impl/ThreadLocalTenantContextHolderStrategy.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.supwisdom.multitenant.impl;
-
-import com.supwisdom.multitenant.TenantContext;
-import com.supwisdom.multitenant.TenantContextHolderStrategy;
-
-public class ThreadLocalTenantContextHolderStrategy implements TenantContextHolderStrategy {
-  private static final ThreadLocal<TenantContext> contextHolder = new ThreadLocal<>();
-
-  @Override
-  public TenantContext getContext() {
-    TenantContext context = contextHolder.get();
-    if (context == null) {
-      context = createEmptyContext();
-      contextHolder.set(context);
-    }
-    return context;
-  }
-
-  @Override
-  public void setContext(TenantContext tenant) {
-    contextHolder.set(tenant);
-  }
-
-  @Override
-  public void clearContext() {
-    contextHolder.remove();
-  }
-
-  @Override
-  public TenantContext createEmptyContext() {
-    return new TenantContextImpl();
-  }
-}
diff --git a/multi-tenant-core/src/test/java/com/supwisdom/multitenant/HttpHeaderTest.java b/multi-tenant-core/src/test/java/com/supwisdom/multitenant/HttpHeaderTest.java
deleted file mode 100644
index ce1ce58..0000000
--- a/multi-tenant-core/src/test/java/com/supwisdom/multitenant/HttpHeaderTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.supwisdom.multitenant;
-
-import com.supwisdom.multitenant.annotations.EnableHttpHeaderTenantInterceptor;
-import com.supwisdom.multitenant.condition.OnPgDatabase;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Conditional;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.test.context.TestPropertySource;
-
-import java.util.Arrays;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-
-@SpringBootTest(classes = {HttpHeaderTest.class})
-@TestPropertySource("/test.properties")
-@EnableHttpHeaderTenantInterceptor
-public class HttpHeaderTest {
-
-  @Autowired
-  private ApplicationContext appContext;
-
-  @Test
-  public void testSessionOk() {
-    assertThat(TenantContextHolder.getContext(), notNullValue());
-    assertThat(findBeanByName(HttpHeaderAutoRegistrar.BEAN_NAME), is(true));
-  }
-
-  @Test
-  public void testError() {
-    assertThat(findBeanByName(HttpSessionAutoRegistrar.BEAN_NAME), is(false));
-  }
-
-  @Configuration
-  static class PostgresTest {
-    @Bean
-    @Conditional(OnPgDatabase.class)
-    public PostgresTest testPg() {
-      return new PostgresTest();
-    }
-  }
-
-
-  private boolean findBeanByName(String name) {
-    String[] beans = appContext.getBeanDefinitionNames();
-    Arrays.sort(beans);
-    for (String bean : beans) {
-      if (name.equals(bean)) {
-        return true;
-      }
-    }
-    return false;
-  }
-}
diff --git a/multi-tenant-core/src/test/java/com/supwisdom/multitenant/HttpSessionTest.java b/multi-tenant-core/src/test/java/com/supwisdom/multitenant/HttpSessionTest.java
deleted file mode 100644
index ea612e1..0000000
--- a/multi-tenant-core/src/test/java/com/supwisdom/multitenant/HttpSessionTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.supwisdom.multitenant;
-
-import com.supwisdom.multitenant.annotations.EnableSessionTenantInterceptor;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.ApplicationContext;
-import org.springframework.test.context.TestPropertySource;
-
-import java.util.Arrays;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-
-@SpringBootTest(classes = {HttpSessionTest.class})
-@TestPropertySource("/test.properties")
-@EnableSessionTenantInterceptor
-public class HttpSessionTest {
-  @Autowired
-  private ApplicationContext appContext;
-
-  @Test
-  public void testSessionOk() {
-    assertThat(TenantContextHolder.getContext(), notNullValue());
-    assertThat(findBeanByName(HttpSessionAutoRegistrar.BEAN_NAME), is(true));
-  }
-
-  @Test
-  public void testError() {
-    assertThat(findBeanByName(HttpHeaderAutoRegistrar.BEAN_NAME), is(false));
-  }
-
-
-  private boolean findBeanByName(String name) {
-    String[] beans = appContext.getBeanDefinitionNames();
-    Arrays.sort(beans);
-    for (String bean : beans) {
-      if (name.equals(bean)) {
-        return true;
-      }
-    }
-    return false;
-  }
-}
diff --git a/multi-tenant-core/src/test/resources/test.properties b/multi-tenant-core/src/test/resources/test.properties
deleted file mode 100644
index d6cc728..0000000
--- a/multi-tenant-core/src/test/resources/test.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-debug=true
-spring.jpa.database-platform=postgresql
diff --git a/multi-tenant-datasource/build.gradle b/multi-tenant-datasource/build.gradle
deleted file mode 100644
index bc2a812..0000000
--- a/multi-tenant-datasource/build.gradle
+++ /dev/null
@@ -1,29 +0,0 @@
-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 project(":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/multitenant/datasource/MultiTenantConnectionProviderImpl.java b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantConnectionProviderImpl.java
deleted file mode 100644
index 737cba0..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantConnectionProviderImpl.java
+++ /dev/null
@@ -1,79 +0,0 @@
-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
deleted file mode 100644
index 394b743..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantDataSourceProvider.java
+++ /dev/null
@@ -1,9 +0,0 @@
-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
deleted file mode 100644
index 6706bd1..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/MultiTenantFactory.java
+++ /dev/null
@@ -1,7 +0,0 @@
-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
deleted file mode 100644
index 5e0b6da..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/beans/TenantProps.java
+++ /dev/null
@@ -1,5 +0,0 @@
-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
deleted file mode 100644
index db0c5f7..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/config/MultiTenantDataSourceAutoConfiguration.java
+++ /dev/null
@@ -1,22 +0,0 @@
-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/multitenant/datasource/config/MutliTenantHibernateConfig.java b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/config/MutliTenantHibernateConfig.java
deleted file mode 100644
index 87be5f6..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/config/MutliTenantHibernateConfig.java
+++ /dev/null
@@ -1,68 +0,0 @@
-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;
-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
-@ConditionalOnBean({MultiTenantAutoConfiguration.class})
-@Slf4j
-public class MutliTenantHibernateConfig {
-
-  private final JpaProperties jpaProperties;
-
-  private final HibernateProperties hibernateProperties;
-
-  public MutliTenantHibernateConfig(@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/multitenant/datasource/impl/PostgresDataSourceProvider.java b/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/impl/PostgresDataSourceProvider.java
deleted file mode 100644
index 19305ef..0000000
--- a/multi-tenant-datasource/src/main/java/com/supwisdom/multitenant/datasource/impl/PostgresDataSourceProvider.java
+++ /dev/null
@@ -1,25 +0,0 @@
-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/test/java/com/supwisdom/multitenant/datasource/PgDatasourceTest.java b/multi-tenant-datasource/src/test/java/com/supwisdom/multitenant/datasource/PgDatasourceTest.java
deleted file mode 100644
index 7aae07a..0000000
--- a/multi-tenant-datasource/src/test/java/com/supwisdom/multitenant/datasource/PgDatasourceTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-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
deleted file mode 100644
index 3613c3b..0000000
--- a/multi-tenant-datasource/src/test/resources/test-pg.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-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
diff --git a/settings.gradle b/settings.gradle
index 9ec25d1..c670d5a 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -4,6 +4,4 @@
 include 'payapi-common'
 include 'ynrcc-agent'
 include 'oauth'
-include 'multi-tenant-core'
-include 'multi-tenant-datasource'
 
