增加了multi-tenant-core, multi-tenant-datasource ,未完全测试
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();
+ }
+}