diff --git a/build.gradle b/build.gradle
index 72ec3a0..96a615d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -53,7 +53,7 @@
     implementation group: 'taglibs', name: 'standard', version: '1.1.2'
     implementation group: 'commons-codec', name: 'commons-codec', version: '1.6'
     implementation files('libs/ojdbc6.jar')
-
+    implementation 'commons-dbcp:commons-dbcp:1.4'
 
     annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
 
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 61b2df9..61c327f 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -24,8 +24,19 @@
 security.request.sign=false
 ##################################################
 ## quartz task scheduler
-<<<<<<< HEAD
 shopbalance.updater.cron=-
-=======
-shopbalance.updater.cron = -
->>>>>>> 手机端API认证
+
+##################多租户配置 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
+#datasource.driverClass=org.postgresql.Driver
+#datasource.url=jdbc:postgresql://172.28.201.70:15432/payapi
+#datasource.username=payapi
+#datasource.password=123456
+#datasource.maxActive=100
+#datasource.maxIdle=30
+#datasource.maxWait=30
+#datasource.minIdle=5
+##################多租户配置 end################################
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java b/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java
new file mode 100644
index 0000000..0f1d799
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.framework.tenant;
+
+import org.hibernate.engine.jdbc.connections.spi.AbstractDataSourceBasedMultiTenantConnectionProviderImpl;
+
+import javax.sql.DataSource;
+
+/**
+ * Created by shuwei on 2018/12/4.
+ */
+public class MultiTenantConnectionProviderImpl extends AbstractDataSourceBasedMultiTenantConnectionProviderImpl {
+    @Override
+    protected DataSource selectAnyDataSource() {
+        return TenantDataSourceProvider.getTenantDataSource("default");
+    }
+
+    @Override
+    protected DataSource selectDataSource(String tenantIdentifier) {
+        return TenantDataSourceProvider.getTenantDataSource(TenantThread.getTenantSchema());
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantIdentifierResolver.java b/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantIdentifierResolver.java
new file mode 100644
index 0000000..d2dc781
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantIdentifierResolver.java
@@ -0,0 +1,21 @@
+package com.supwisdom.dlpay.framework.tenant;
+
+import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
+
+/**
+ * Created by shuwei on 2018/12/4.
+ */
+public class MultiTenantIdentifierResolver implements CurrentTenantIdentifierResolver {
+    @Override
+    public String resolveCurrentTenantIdentifier() {
+        if(TenantThread.getTenantSchema()==null){
+            return "default";
+        }
+        return TenantThread.getTenantSchema();
+    }
+
+    @Override
+    public boolean validateExistingCurrentSessions() {
+        return true;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantDataSourceProvider.java b/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantDataSourceProvider.java
new file mode 100644
index 0000000..d93db46
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantDataSourceProvider.java
@@ -0,0 +1,96 @@
+package com.supwisdom.dlpay.framework.tenant;
+
+import org.apache.commons.dbcp.BasicDataSource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.sql.DataSource;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by shuwei on 2018/12/4.
+ */
+@Component
+public class TenantDataSourceProvider {
+    @Value("${datasource.driverClass}")
+    private String driver;
+    @Value("${datasource.url}")
+    private String url;
+    @Value("${datasource.username}")
+    private String username;
+    @Value("${datasource.password}")
+    private String password;
+    @Value("${datasource.maxIdle}")
+    private int maxIdle;
+    @Value("${datasource.maxActive}")
+    private int maxActive;
+    @Value("${datasource.minIdle}")
+    private int minIdle;
+    @Value("${datasource.maxWait}")
+    private int maxWait;
+
+    public static String static_driver;
+    public static String static_url;
+    public static String static_username;
+    public static String static_password;
+    public static int static_maxIdle;
+    public static int static_maxActive;
+    public static int static_minIdle;
+    public static int static_maxWait;
+
+
+    @PostConstruct
+    public void beforeInit() {
+        static_driver = driver;
+        static_url = url;
+        static_username = username;
+        static_password = password;
+        static_maxIdle = maxIdle;
+        static_maxActive = maxActive;
+        static_minIdle = minIdle;
+        static_maxWait = maxWait;
+    }
+    // 使用一个map来存储我们租户和对应的数据源，租户和数据源的信息就是从我们的tenant_info表中读出来
+    private static Map<String, DataSource> dataSourceMap = new HashMap<>();
+
+    /**
+     * 静态建立一个数据源，也就是我们的默认数据源，假如我们的访问信息里面没有指定tenantId，就使用默认数据源。
+     * 在我这里默认数据源是cloud_config，实际上你可以指向你们的公共信息的库，或者拦截这个操作返回错误。
+     */
+    // 根据传进来的tenantId决定返回的数据源
+    public static DataSource getTenantDataSource(String schemaId) {
+        DataSource d = dataSourceMap.get(schemaId);
+        if (d == null) {
+            String appSchema = schemaId != null ? "'" + schemaId + "','public'" : "'public'";
+            String searchPath = "SET search_path = " + appSchema + ";";
+            d = createDataSource(schemaId == null, searchPath);
+            dataSourceMap.put(schemaId, d);
+        }
+        return d;
+    }
+
+    // 初始化的时候用于添加数据源的方法
+    public static DataSource createDataSource(boolean rootdatabase, String searchPath) {
+        BasicDataSource dataSource = new BasicDataSource();
+        dataSource.setDriverClassName(static_driver);
+        dataSource.setUrl(static_url);
+        dataSource.setUsername(static_username);
+        dataSource.setPassword(static_password);
+        dataSource.setMaxActive(static_maxActive);
+        dataSource.setMaxIdle(static_maxIdle);
+        dataSource.setMaxWait(static_maxWait);
+        dataSource.setMinIdle(static_minIdle);
+        if(static_driver.toLowerCase().contains("oracle")){
+            dataSource.setValidationQuery("select 1 from dual");
+        }else {
+            dataSource.setValidationQuery("select 1 ");
+            if(static_driver.toLowerCase().contains("postgresql")) {
+                dataSource.setConnectionInitSqls(Collections.singletonList(searchPath));
+            }
+        }
+        return dataSource;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantThread.java b/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantThread.java
new file mode 100644
index 0000000..2bfb113
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantThread.java
@@ -0,0 +1,16 @@
+package com.supwisdom.dlpay.framework.tenant;
+
+/**
+ * Created by shuwei on 2018/11/29.
+ */
+public class TenantThread {
+    private static ThreadLocal<String> tenant_schema = new ThreadLocal<>();
+
+    public static void setTenantSchema(String tid) {
+        tenant_schema.set(tid);
+    }
+
+    public static String getTenantSchema() {
+        return tenant_schema.get();
+    }
+}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt b/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
index e1b5869..d401fa0 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
@@ -8,6 +8,7 @@
 import com.supwisdom.dlpay.framework.domain.JwtRedis
 import com.supwisdom.dlpay.framework.redisrepo.ApiClientRepository
 import com.supwisdom.dlpay.framework.redisrepo.ApiJwtRepository
+import com.supwisdom.dlpay.framework.util.Constants
 import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.mobile.dao.MobileUserDao
@@ -47,6 +48,7 @@
             val token = JwtTokenUtil(jwtConfig).generateToken(
                     mapOf("uid" to user.uid, "issuer" to "payapi",
                             "audience" to temp.phone,
+                            Constants.JWT_CLAIM_TENANTID to "mobile",
                             "authorities" to temp.authorities))
             var jwt = JwtRedis().apply {
                 jti = token.jti
