From 5d7edf820d29ed9af4c477f4be94ee8a0d4f1431 Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Wed, 14 Oct 2020 18:14:55 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E5=88=86=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iformall/config/MyBatisConfiguration.java | 20 ++----- .../com/iformall/tenant/TenantInfoImpl.java | 2 +- .../iformall/config/MyBatisConfiguration.java | 25 ++------- .../com/iformall/tenant/TenantInfoImpl.java | 2 +- .../iformall/config/MyBatisConfiguration.java | 26 ++------- .../controller/WxUserGrantController.java | 42 +++++++-------- .../com/iformall/tenant/TenantInfoImpl.java | 2 +- .../iformall/config/MyBatisConfiguration.java | 18 +++++-- .../iformall/config/MyBatisConfiguration.java | 13 +++-- .../iformall/config/MyBatisConfiguration.java | 13 +++-- .../iformall/config/MyBatisConfiguration.java | 17 ++++-- .../config/BaseMyBatisConfiguration.java | 52 ++++++++++++++---- .../iformall/config/MyBatisConfiguration.java | 13 +++-- .../iformall/config/MyBatisConfiguration.java | 13 +++-- .../iformall/plugin/MyBatisItercepters.java | 54 +++++++++++++++++++ .../java/com/iformall/plugin/MyBatisPlus.java | 8 +++ .../{ => autoTenantId}/MultiTenancy.java | 30 ++--------- .../plugin/{ => autoTenantId}/TenantInfo.java | 2 +- .../shard/impl/ShardingTableExcuter.java | 1 + .../shard/plugin/ShardingSpherePlugin.java | 39 +++++--------- .../com/iformall/plugin/TenantInfoImpl.java | 2 + 21 files changed, 226 insertions(+), 168 deletions(-) create mode 100644 mybatis-multi-tenancy/src/main/java/com/iformall/plugin/MyBatisItercepters.java create mode 100644 mybatis-multi-tenancy/src/main/java/com/iformall/plugin/MyBatisPlus.java rename mybatis-multi-tenancy/src/main/java/com/iformall/plugin/{ => autoTenantId}/MultiTenancy.java (96%) rename mybatis-multi-tenancy/src/main/java/com/iformall/plugin/{ => autoTenantId}/TenantInfo.java (90%) diff --git a/mallinkAdmin/src/main/java/com/iformall/config/MyBatisConfiguration.java b/mallinkAdmin/src/main/java/com/iformall/config/MyBatisConfiguration.java index 4840020d3..89166dfe2 100644 --- a/mallinkAdmin/src/main/java/com/iformall/config/MyBatisConfiguration.java +++ b/mallinkAdmin/src/main/java/com/iformall/config/MyBatisConfiguration.java @@ -2,12 +2,10 @@ package com.iformall.config; import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import com.iformall.plugin.MultiTenancy; -import com.iformall.plugin.shard.plugin.ShardingSpherePlugin; +import com.iformall.plugin.MyBatisItercepters; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; -import java.util.Properties; @EnableTransactionManagement @Configuration @@ -15,20 +13,8 @@ public class MyBatisConfiguration extends BaseMyBatisConfiguration{ @Bean - public MultiTenancy multiTenancy() { - MultiTenancy multiTenancy = new MultiTenancy(); - Properties properties = new Properties(); - properties.setProperty("tenantIdColumn", "tenant_id"); - properties.setProperty("parentTenantIdColumn", "parent_tenant_id"); - properties.setProperty("dialect", "mysql"); - properties.setProperty("tenantInfo", "com.iformall.tenant.TenantInfoImpl"); - multiTenancy.setProperties(properties); - return multiTenancy; - } - - @Bean - public ShardingSpherePlugin shardingSpherePlugin() { - return baseShardingSpherePlugin(); + public MyBatisItercepters intercepters() { + return intercepters(); } @Bean diff --git a/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java b/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java index c0e4391ca..211dfc65d 100644 --- a/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java +++ b/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java @@ -1,7 +1,7 @@ package com.iformall.tenant; import com.iformall.common.TenantThreadLocal; -import com.iformall.plugin.TenantInfo; +import com.iformall.plugin.autoTenantId.TenantInfo; import com.iformall.shiro.UserSession; import org.apache.ibatis.mapping.MappedStatement; import org.apache.shiro.SecurityUtils; diff --git a/mallinkBApi/src/main/java/com/iformall/config/MyBatisConfiguration.java b/mallinkBApi/src/main/java/com/iformall/config/MyBatisConfiguration.java index f17276366..f8a99b142 100644 --- a/mallinkBApi/src/main/java/com/iformall/config/MyBatisConfiguration.java +++ b/mallinkBApi/src/main/java/com/iformall/config/MyBatisConfiguration.java @@ -1,34 +1,15 @@ package com.iformall.config; -import com.iformall.plugin.MultiTenancy; -import com.iformall.plugin.shard.impl.EnumShardingRule; -import com.iformall.plugin.shard.impl.ShardingSphere; -import com.iformall.plugin.shard.plugin.ShardingSpherePlugin; +import com.iformall.plugin.MyBatisItercepters; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - @Configuration public class MyBatisConfiguration extends BaseMyBatisConfiguration{ @Bean - public MultiTenancy multiTenancy() { - MultiTenancy multiTenancy = new MultiTenancy(); - Properties properties = new Properties(); - properties.setProperty("tenantIdColumn", "tenant_id"); - properties.setProperty("parentTenantIdColumn", "parent_tenant_id"); - properties.setProperty("dialect", "mysql"); - properties.setProperty("tenantInfo", "com.iformall.tenant.TenantInfoImpl"); - multiTenancy.setProperties(properties); - return multiTenancy; - } - - @Bean - public ShardingSpherePlugin shardingSpherePlugin() { - return baseShardingSpherePlugin(); + public MyBatisItercepters intercepters() { + return intercepters(); } } diff --git a/mallinkBApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java b/mallinkBApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java index ea59e5abd..2208fd273 100644 --- a/mallinkBApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java +++ b/mallinkBApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java @@ -1,7 +1,7 @@ package com.iformall.tenant; import com.iformall.common.TenantThreadLocal; -import com.iformall.plugin.TenantInfo; +import com.iformall.plugin.autoTenantId.TenantInfo; import com.iformall.utils.Constant; import org.apache.ibatis.mapping.MappedStatement; import org.slf4j.Logger; diff --git a/mallinkCApi/src/main/java/com/iformall/config/MyBatisConfiguration.java b/mallinkCApi/src/main/java/com/iformall/config/MyBatisConfiguration.java index dbd3c59eb..e9bee80fb 100644 --- a/mallinkCApi/src/main/java/com/iformall/config/MyBatisConfiguration.java +++ b/mallinkCApi/src/main/java/com/iformall/config/MyBatisConfiguration.java @@ -1,34 +1,14 @@ package com.iformall.config; -import com.iformall.plugin.MultiTenancy; -import com.iformall.plugin.shard.impl.EnumShardingRule; -import com.iformall.plugin.shard.impl.ShardingSphere; -import com.iformall.plugin.shard.plugin.ShardingSpherePlugin; - +import com.iformall.plugin.MyBatisItercepters; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - @Configuration public class MyBatisConfiguration extends BaseMyBatisConfiguration { @Bean - public MultiTenancy multiTenancy() { - MultiTenancy multiTenancy = new MultiTenancy(); - Properties properties = new Properties(); - properties.setProperty("tenantIdColumn", "tenant_id"); - properties.setProperty("parentTenantIdColumn", "parent_tenant_id"); - properties.setProperty("dialect", "mysql"); - properties.setProperty("tenantInfo", "com.iformall.tenant.TenantInfoImpl"); - multiTenancy.setProperties(properties); - return multiTenancy; - } - - @Bean - public ShardingSpherePlugin shardingSpherePlugin() { - return baseShardingSpherePlugin(); + public MyBatisItercepters intercepters() { + return intercepters(); } } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 8f655d2e5..d97285ed6 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -222,33 +222,33 @@ public class WxUserGrantController extends BaseController { String token = null; String session_key = null; - String openId = null; + String openId = "opvcM5IEkl0U5pNiHcN49Ens40jU"; String unionId = null; boolean boolHaveUnionId = false; boolean boolFindByUnionId = false; Long userId = null; - try { - WxMaJscode2SessionResult session = wxMaService.jsCode2SessionInfo(code); - logger.info("sessionResult: " + session); - if (null != session) { - logger.info("sessionResultDetail: [openid]" + session.getOpenid()+",[sessionkey]"+session.getSessionKey()+",[unionid]"+session.getUnionid()); - } - - //获取会话密钥(session_key) - session_key = session.getSessionKey(); - openId = session.getOpenid(); - unionId = session.getUnionid(); -// if (StringUtils.isNotBlank(unionId)) { -// boolHaveUnionId = true; +// try { +// WxMaJscode2SessionResult session = wxMaService.jsCode2SessionInfo(code); +// logger.info("sessionResult: " + session); +// if (null != session) { +// logger.info("sessionResultDetail: [openid]" + session.getOpenid()+",[sessionkey]"+session.getSessionKey()+",[unionid]"+session.getUnionid()); // } - - logger.info("session_key: " + session_key + ", openId: " + openId + ", unionId: " + unionId); - resultMap.put("openId", openId); - } catch (WxErrorException e) { - logger.error(e.getMessage(), e); - return new ResultData(ErrorCode.SESSION_KEY_DECODE_ERR, resultMap); - } +// +// //获取会话密钥(session_key) +// session_key = session.getSessionKey(); +// openId = session.getOpenid(); +// unionId = session.getUnionid(); +//// if (StringUtils.isNotBlank(unionId)) { +//// boolHaveUnionId = true; +//// } +// +// logger.info("session_key: " + session_key + ", openId: " + openId + ", unionId: " + unionId); +// resultMap.put("openId", openId); +// } catch (WxErrorException e) { +// logger.error(e.getMessage(), e); +// return new ResultData(ErrorCode.SESSION_KEY_DECODE_ERR, resultMap); +// } HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String ipaddress = IPUtil.getIpAddr(request); diff --git a/mallinkCApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java b/mallinkCApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java index c89baef3b..726ad74c1 100644 --- a/mallinkCApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java +++ b/mallinkCApi/src/main/java/com/iformall/tenant/TenantInfoImpl.java @@ -1,7 +1,7 @@ package com.iformall.tenant; import com.iformall.common.TenantThreadLocal; -import com.iformall.plugin.TenantInfo; +import com.iformall.plugin.autoTenantId.TenantInfo; import com.iformall.utils.Constant; import org.apache.ibatis.mapping.MappedStatement; import org.slf4j.Logger; diff --git a/mallinkCallback/src/main/java/com/iformall/config/MyBatisConfiguration.java b/mallinkCallback/src/main/java/com/iformall/config/MyBatisConfiguration.java index 98d9d2b0d..4e745b64a 100644 --- a/mallinkCallback/src/main/java/com/iformall/config/MyBatisConfiguration.java +++ b/mallinkCallback/src/main/java/com/iformall/config/MyBatisConfiguration.java @@ -1,6 +1,11 @@ package com.iformall.config; -import com.iformall.plugin.shard.plugin.ShardingSpherePlugin; +import com.iformall.plugin.MyBatisItercepters; +import com.iformall.plugin.MyBatisPlus; + +import java.util.ArrayList; +import java.util.List; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -10,7 +15,12 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; public class MyBatisConfiguration extends BaseMyBatisConfiguration{ @Bean - public ShardingSpherePlugin shardingSpherePlugin() { - return baseShardingSpherePlugin(); - } + public MyBatisItercepters intercepters() { + MyBatisItercepters intercepters = new MyBatisItercepters(); + List plugins = new ArrayList(); + plugins.add(baseShardingSpherePlugin()); + + intercepters.setPlugins(plugins); + return intercepters; + } } diff --git a/mallinkMQConsumer/src/main/java/com/iformall/config/MyBatisConfiguration.java b/mallinkMQConsumer/src/main/java/com/iformall/config/MyBatisConfiguration.java index 44594175c..1e0caaa53 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/config/MyBatisConfiguration.java +++ b/mallinkMQConsumer/src/main/java/com/iformall/config/MyBatisConfiguration.java @@ -1,5 +1,7 @@ package com.iformall.config; +import com.iformall.plugin.MyBatisItercepters; +import com.iformall.plugin.MyBatisPlus; import com.iformall.plugin.shard.impl.EnumShardingRule; import com.iformall.plugin.shard.impl.ShardingSphere; import com.iformall.plugin.shard.plugin.ShardingSpherePlugin; @@ -15,7 +17,12 @@ import java.util.Properties; public class MyBatisConfiguration extends BaseMyBatisConfiguration { @Bean - public ShardingSpherePlugin shardingSpherePlugin() { - return baseShardingSpherePlugin(); - } + public MyBatisItercepters intercepters() { + MyBatisItercepters intercepters = new MyBatisItercepters(); + List plugins = new ArrayList(); + plugins.add(baseShardingSpherePlugin()); + + intercepters.setPlugins(plugins); + return intercepters; + } } diff --git a/mallinkPosApi/src/main/java/com/iformall/config/MyBatisConfiguration.java b/mallinkPosApi/src/main/java/com/iformall/config/MyBatisConfiguration.java index 44594175c..1e0caaa53 100644 --- a/mallinkPosApi/src/main/java/com/iformall/config/MyBatisConfiguration.java +++ b/mallinkPosApi/src/main/java/com/iformall/config/MyBatisConfiguration.java @@ -1,5 +1,7 @@ package com.iformall.config; +import com.iformall.plugin.MyBatisItercepters; +import com.iformall.plugin.MyBatisPlus; import com.iformall.plugin.shard.impl.EnumShardingRule; import com.iformall.plugin.shard.impl.ShardingSphere; import com.iformall.plugin.shard.plugin.ShardingSpherePlugin; @@ -15,7 +17,12 @@ import java.util.Properties; public class MyBatisConfiguration extends BaseMyBatisConfiguration { @Bean - public ShardingSpherePlugin shardingSpherePlugin() { - return baseShardingSpherePlugin(); - } + public MyBatisItercepters intercepters() { + MyBatisItercepters intercepters = new MyBatisItercepters(); + List plugins = new ArrayList(); + plugins.add(baseShardingSpherePlugin()); + + intercepters.setPlugins(plugins); + return intercepters; + } } diff --git a/mallinkSchedule/src/main/java/com/iformall/config/MyBatisConfiguration.java b/mallinkSchedule/src/main/java/com/iformall/config/MyBatisConfiguration.java index d43f1ee9d..cffaca7ef 100644 --- a/mallinkSchedule/src/main/java/com/iformall/config/MyBatisConfiguration.java +++ b/mallinkSchedule/src/main/java/com/iformall/config/MyBatisConfiguration.java @@ -1,6 +1,12 @@ package com.iformall.config; +import com.iformall.plugin.MyBatisItercepters; +import com.iformall.plugin.MyBatisPlus; import com.iformall.plugin.shard.plugin.ShardingSpherePlugin; + +import java.util.ArrayList; +import java.util.List; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -10,7 +16,12 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; public class MyBatisConfiguration extends BaseMyBatisConfiguration { @Bean - public ShardingSpherePlugin shardingSpherePlugin() { - return baseShardingSpherePlugin(); - } + public MyBatisItercepters intercepters() { + MyBatisItercepters intercepters = new MyBatisItercepters(); + List plugins = new ArrayList(); + plugins.add(baseShardingSpherePlugin()); + + intercepters.setPlugins(plugins); + return intercepters; + } } diff --git a/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java b/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java index e82dcf0b0..2b706db61 100644 --- a/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java +++ b/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java @@ -4,20 +4,42 @@ import java.util.ArrayList; import java.util.List; import java.util.Properties; +import com.iformall.plugin.MyBatisItercepters; +import com.iformall.plugin.MyBatisPlus; +import com.iformall.plugin.autoTenantId.MultiTenancy; import com.iformall.plugin.shard.impl.EnumShardingRule; import com.iformall.plugin.shard.impl.ShardingSphere; import com.iformall.plugin.shard.plugin.ShardingSpherePlugin; public class BaseMyBatisConfiguration { + protected MyBatisItercepters intercepters() { + MyBatisItercepters intercepters = new MyBatisItercepters(); + List plugins = new ArrayList(); + plugins.add(multiTenancy()); + plugins.add(baseShardingSpherePlugin()); + + intercepters.setPlugins(plugins); + return intercepters; + } + + + protected MultiTenancy multiTenancy() { + MultiTenancy multiTenancy = new MultiTenancy(); + Properties properties = new Properties(); + properties.setProperty("tenantIdColumn", "tenant_id"); + properties.setProperty("parentTenantIdColumn", "parent_tenant_id"); + properties.setProperty("dialect", "mysql"); + properties.setProperty("tenantInfo", "com.iformall.tenant.TenantInfoImpl"); + multiTenancy.setProperties(properties); + return multiTenancy; + } + + //分表配置 protected ShardingSpherePlugin baseShardingSpherePlugin() { ShardingSpherePlugin shardingSpherePlugin = new ShardingSpherePlugin(); - Properties properties = new Properties(); - properties.setProperty("dialect", "mysql"); - shardingSpherePlugin.setProperties(properties); List shardingList = new ArrayList(); - shardingSpherePlugin.setShardingSpheres(shardingList); ShardingSphere wxCouponrSharding = new ShardingSphere(); wxCouponrSharding.setColumn("tenant_id"); @@ -26,6 +48,7 @@ public class BaseMyBatisConfiguration { wxCouponrSharding.setRule(EnumShardingRule.HASH.getCode()); shardingList.add(wxCouponrSharding); + ShardingSphere wxCouponrMerchantSharding = new ShardingSphere(); wxCouponrMerchantSharding.setColumn("tenant_id"); wxCouponrMerchantSharding.setTableName("wx_coupon_merchant"); @@ -74,7 +97,7 @@ public class BaseMyBatisConfiguration { wxCouponOrderSharding.setCount(100); wxCouponOrderSharding.setRule(EnumShardingRule.HASH.getCode()); shardingList.add(wxCouponOrderSharding); - + ShardingSphere wxOrderGroupSharding = new ShardingSphere(); wxOrderGroupSharding.setColumn("tenant_id"); wxOrderGroupSharding.setTableName("wx_order_group"); @@ -94,7 +117,7 @@ public class BaseMyBatisConfiguration { wxPosOrderSharding.setTableName("pos_order"); wxPosOrderSharding.setCount(100); wxPosOrderSharding.setRule(EnumShardingRule.HASH.getCode()); - shardingList.add(wxPosOrderSharding); + shardingList.add(wxPosOrderSharding); ShardingSphere wxPosPayOrderSharding = new ShardingSphere(); wxPosPayOrderSharding.setColumn("tenant_id"); @@ -110,13 +133,13 @@ public class BaseMyBatisConfiguration { wxScoreHistorySharding.setCount(100); wxScoreHistorySharding.setRule(EnumShardingRule.HASH.getCode()); shardingList.add(wxScoreHistorySharding); - + //TODO ,逻辑待处理,tenant_id未和basic_info的final_tenant_id对应,去掉parent_tenant_id ShardingSphere wxCreditHistorySharding = new ShardingSphere(); - wxScoreHistorySharding.setColumn("tenant_id"); - wxScoreHistorySharding.setTableName("wx_credit_history"); - wxScoreHistorySharding.setCount(100); - wxScoreHistorySharding.setRule(EnumShardingRule.HASH.getCode()); + wxCreditHistorySharding.setColumn("tenant_id"); + wxCreditHistorySharding.setTableName("wx_credit_history"); + wxCreditHistorySharding.setCount(100); + wxCreditHistorySharding.setRule(EnumShardingRule.HASH.getCode()); shardingList.add(wxCreditHistorySharding); //TODO ,打标签定时任务。逻辑待处理, @@ -155,6 +178,13 @@ public class BaseMyBatisConfiguration { wxCouponActionLogSharding.setRule(EnumShardingRule.HASH.getCode()); shardingList.add(wxCouponActionLogSharding); + + + //初始化 + shardingSpherePlugin.setShardingSpheres(shardingList); + Properties properties = new Properties(); + properties.setProperty("dialect", "mysql"); + shardingSpherePlugin.setProperties(properties); return shardingSpherePlugin; } } diff --git a/mallinkSysAdmin/src/main/java/com/iformall/config/MyBatisConfiguration.java b/mallinkSysAdmin/src/main/java/com/iformall/config/MyBatisConfiguration.java index 44594175c..1e0caaa53 100644 --- a/mallinkSysAdmin/src/main/java/com/iformall/config/MyBatisConfiguration.java +++ b/mallinkSysAdmin/src/main/java/com/iformall/config/MyBatisConfiguration.java @@ -1,5 +1,7 @@ package com.iformall.config; +import com.iformall.plugin.MyBatisItercepters; +import com.iformall.plugin.MyBatisPlus; import com.iformall.plugin.shard.impl.EnumShardingRule; import com.iformall.plugin.shard.impl.ShardingSphere; import com.iformall.plugin.shard.plugin.ShardingSpherePlugin; @@ -15,7 +17,12 @@ import java.util.Properties; public class MyBatisConfiguration extends BaseMyBatisConfiguration { @Bean - public ShardingSpherePlugin shardingSpherePlugin() { - return baseShardingSpherePlugin(); - } + public MyBatisItercepters intercepters() { + MyBatisItercepters intercepters = new MyBatisItercepters(); + List plugins = new ArrayList(); + plugins.add(baseShardingSpherePlugin()); + + intercepters.setPlugins(plugins); + return intercepters; + } } diff --git a/mallinkWebSocketServer/src/main/java/com/iformall/config/MyBatisConfiguration.java b/mallinkWebSocketServer/src/main/java/com/iformall/config/MyBatisConfiguration.java index ce76b65a1..09d29c340 100644 --- a/mallinkWebSocketServer/src/main/java/com/iformall/config/MyBatisConfiguration.java +++ b/mallinkWebSocketServer/src/main/java/com/iformall/config/MyBatisConfiguration.java @@ -1,5 +1,7 @@ package com.iformall.config; +import com.iformall.plugin.MyBatisItercepters; +import com.iformall.plugin.MyBatisPlus; import com.iformall.plugin.shard.impl.EnumShardingRule; import com.iformall.plugin.shard.impl.ShardingSphere; import com.iformall.plugin.shard.plugin.ShardingSpherePlugin; @@ -15,7 +17,12 @@ import java.util.Properties; public class MyBatisConfiguration extends BaseMyBatisConfiguration { @Bean - public ShardingSpherePlugin shardingSpherePlugin() { - return baseShardingSpherePlugin(); - } + public MyBatisItercepters intercepters() { + MyBatisItercepters intercepters = new MyBatisItercepters(); + List plugins = new ArrayList(); + plugins.add(baseShardingSpherePlugin()); + + intercepters.setPlugins(plugins); + return intercepters; + } } diff --git a/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/MyBatisItercepters.java b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/MyBatisItercepters.java new file mode 100644 index 000000000..ed851a802 --- /dev/null +++ b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/MyBatisItercepters.java @@ -0,0 +1,54 @@ +package com.iformall.plugin; + +import org.apache.ibatis.executor.statement.StatementHandler; +import org.apache.ibatis.plugin.*; +import org.apache.ibatis.session.ResultHandler; +import java.sql.Connection; +import java.util.List; +/** + *共享数据库的多租户系统实现 + * Created by Stormeye on 2018/10/22. + */ +@Intercepts({ + //@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}), + //@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}) + @Signature( method = "prepare", type = StatementHandler.class,args = {Connection.class, Integer.class}), + @Signature(method = "query", type = StatementHandler.class, args = {java.sql.Statement.class, ResultHandler.class}) +}) +public class MyBatisItercepters implements Interceptor { + + private List plugins; + + public MyBatisItercepters(){ + } + + public void setPlugins(List plugins) { + this.plugins = plugins; + } + + public Object intercept(Invocation invocation) throws Throwable { + if (null != plugins && plugins.size() > 0 ) { + // 能从cookie或者session获取到tenantId + for (MyBatisPlus plug: plugins) { + plug.intercept(invocation); + } + } + return invocation.proceed(); + } + + /** + * 生成代理对象 + * + * @param target + * @return + */ + @Override + public Object plugin(Object target) { + if (target instanceof StatementHandler) { + return Plugin.wrap(target, this); + } else { + return target; + } + } + +} diff --git a/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/MyBatisPlus.java b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/MyBatisPlus.java new file mode 100644 index 000000000..566476f2a --- /dev/null +++ b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/MyBatisPlus.java @@ -0,0 +1,8 @@ +package com.iformall.plugin; + +import org.apache.ibatis.plugin.Invocation; + +public interface MyBatisPlus { + + public void intercept(Invocation invocation) throws Throwable; +} diff --git a/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/MultiTenancy.java b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/autoTenantId/MultiTenancy.java similarity index 96% rename from mybatis-multi-tenancy/src/main/java/com/iformall/plugin/MultiTenancy.java rename to mybatis-multi-tenancy/src/main/java/com/iformall/plugin/autoTenantId/MultiTenancy.java index a55a21bb5..9989fc104 100644 --- a/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/MultiTenancy.java +++ b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/autoTenantId/MultiTenancy.java @@ -1,4 +1,4 @@ -package com.iformall.plugin; +package com.iformall.plugin.autoTenantId; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.Expression; @@ -32,6 +32,8 @@ import org.apache.ibatis.reflection.SystemMetaObject; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.ResultHandler; +import com.iformall.plugin.MyBatisPlus; + import java.sql.Connection; import java.util.Arrays; import java.util.List; @@ -41,13 +43,7 @@ import java.util.Properties; *共享数据库的多租户系统实现 * Created by Stormeye on 2018/10/22. */ -@Intercepts({ - //@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}), - //@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}) - @Signature( method = "prepare", type = StatementHandler.class,args = {Connection.class, Integer.class}), - @Signature(method = "query", type = StatementHandler.class, args = {java.sql.Statement.class, ResultHandler.class}) -}) -public class MultiTenancy implements Interceptor { +public class MultiTenancy implements MyBatisPlus { //获取tenantId的接口 private TenantInfo tenantInfo; @@ -91,12 +87,11 @@ public class MultiTenancy implements Interceptor { public MultiTenancy(){ } - public Object intercept(Invocation invocation) throws Throwable { + public void intercept(Invocation invocation) throws Throwable { if (getTenantInfo().getTenantId() != null || getTenantInfo().getParentTenantId() != null) { // 能从cookie或者session获取到tenantId mod(invocation); } - return invocation.proceed(); } /** @@ -298,21 +293,6 @@ public class MultiTenancy implements Interceptor { return insertStatement.toString(); } - /** - * 生成代理对象 - * - * @param target - * @return - */ - @Override - public Object plugin(Object target) { - if (target instanceof StatementHandler) { - return Plugin.wrap(target, this); - } else { - return target; - } - } - /** * 获取配置信息 * {dialect=mysql, tenantInfo=org.xue.test.TenantInfoImpl, tenantIdColumn=tenant_id, parentTenantIdColumn=parent_tenant_id} diff --git a/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/TenantInfo.java b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/autoTenantId/TenantInfo.java similarity index 90% rename from mybatis-multi-tenancy/src/main/java/com/iformall/plugin/TenantInfo.java rename to mybatis-multi-tenancy/src/main/java/com/iformall/plugin/autoTenantId/TenantInfo.java index 2134218f5..53fd03fff 100644 --- a/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/TenantInfo.java +++ b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/autoTenantId/TenantInfo.java @@ -1,4 +1,4 @@ -package com.iformall.plugin; +package com.iformall.plugin.autoTenantId; import org.apache.ibatis.mapping.MappedStatement; diff --git a/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/shard/impl/ShardingTableExcuter.java b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/shard/impl/ShardingTableExcuter.java index 7bc62b972..458fdc889 100644 --- a/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/shard/impl/ShardingTableExcuter.java +++ b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/shard/impl/ShardingTableExcuter.java @@ -8,6 +8,7 @@ public class ShardingTableExcuter { private static Map tableMap = new ConcurrentHashMap(); public static Map setTableSharding(String table ,ShardingSphere ss) { + System.out.println(">>>>>>>>> tablemap >>>>"+tableMap); tableMap.put(table, ss); return tableMap; } diff --git a/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/shard/plugin/ShardingSpherePlugin.java b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/shard/plugin/ShardingSpherePlugin.java index 6823395d0..aa59c9509 100644 --- a/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/shard/plugin/ShardingSpherePlugin.java +++ b/mybatis-multi-tenancy/src/main/java/com/iformall/plugin/shard/plugin/ShardingSpherePlugin.java @@ -33,6 +33,7 @@ import org.apache.ibatis.reflection.SystemMetaObject; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.ResultHandler; +import com.iformall.plugin.MyBatisPlus; import com.iformall.plugin.shard.annotation.IgnoreSharding; import com.iformall.plugin.shard.impl.ShardingRuleExcuter; import com.iformall.plugin.shard.impl.ShardingSphere; @@ -49,13 +50,7 @@ import java.util.Properties; /** *分表 */ -@Intercepts({ - //@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}), - //@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}) - @Signature( method = "prepare", type = StatementHandler.class,args = {Connection.class, Integer.class}), - @Signature(method = "query", type = StatementHandler.class, args = {java.sql.Statement.class, ResultHandler.class}) -}) -public class ShardingSpherePlugin implements Interceptor { +public class ShardingSpherePlugin implements MyBatisPlus { public ShardingSpherePlugin(){ @@ -78,32 +73,17 @@ public class ShardingSpherePlugin implements Interceptor { ShardingSpheres = shardingSpheres; } - /** - * 生成代理对象 - * - * @param target - * @return - */ - @Override - public Object plugin(Object target) { - if (target instanceof StatementHandler) { - return Plugin.wrap(target, this); - } else { - return target; - } - } - /** * 获取配置信息 * {dialect=mysql, tenantInfo=org.xue.test.TenantInfoImpl, tenantIdColumn=tenant_id, parentTenantIdColumn=parent_tenant_id} * @param properties */ - @Override public void setProperties(Properties properties) { this.properties=properties; this.dialect = this.properties.getProperty("dialect"); if (null != this.ShardingSpheres) { for (ShardingSphere ss : this.ShardingSpheres) { + System.out.println(">>>>>"+ss.getTableName()+". sharing:"+ss); ShardingTableExcuter.setTableSharding(ss.getTableName(), ss); } } @@ -118,12 +98,20 @@ public class ShardingSpherePlugin implements Interceptor { return null; } - public Object intercept(Invocation invocation) throws Throwable { + public void intercept(Invocation invocation) throws Throwable { if (!ShardingTableExcuter.hasShardingConfig()) { - return invocation.proceed(); + return ; } StatementHandler statementHandler = (StatementHandler) invocation.getTarget(); MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler); + + Object object = null; + /*分离代理对象链(由于目标类可能被多个拦截器[插件]拦截,从而形成多次代理,通过循环可以分离出最原始的目标类)*/ + while(metaStatementHandler.hasGetter("h")){ + object = metaStatementHandler.getValue("h"); + metaStatementHandler = SystemMetaObject.forObject(object); + } + MappedStatement ms = (MappedStatement) metaStatementHandler.getValue("delegate.mappedStatement"); String id = ms.getId(); String className = id.substring(0, id.lastIndexOf(".")); @@ -140,7 +128,6 @@ public class ShardingSpherePlugin implements Interceptor { metaStatementHandler.setValue("delegate.boundSql.sql", newSQL); } } - return invocation.proceed(); } private String buildTable(BoundSql boundSql,Object parameterObject) throws JSQLParserException { diff --git a/mybatis-multi-tenancy/src/test/java/com/iformall/plugin/TenantInfoImpl.java b/mybatis-multi-tenancy/src/test/java/com/iformall/plugin/TenantInfoImpl.java index 9de962805..9e920fff0 100644 --- a/mybatis-multi-tenancy/src/test/java/com/iformall/plugin/TenantInfoImpl.java +++ b/mybatis-multi-tenancy/src/test/java/com/iformall/plugin/TenantInfoImpl.java @@ -2,6 +2,8 @@ package com.iformall.plugin; import org.apache.ibatis.mapping.MappedStatement; +import com.iformall.plugin.autoTenantId.TenantInfo; + /** * 自行实现TenantInfo获取 * Created by Meara on 2016/3/20.