抽离多租户

This commit is contained in:
sgjj 2020-10-31 11:16:27 +08:00
parent 4748d53ab3
commit a50f0f7b55
2 changed files with 6 additions and 51 deletions

View File

@ -5,15 +5,16 @@ import com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils; import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import net.mingsoft.basic.filter.XSSEscapeFilter; import net.mingsoft.basic.filter.XSSEscapeFilter;
import net.mingsoft.basic.interceptor.ActionInterceptor; import net.mingsoft.basic.interceptor.ActionInterceptor;
import net.mingsoft.handler.AppHandler;
import net.mingsoft.interceptor.DMInnerInterceptor; import net.mingsoft.interceptor.DMInnerInterceptor;
import net.mingsoft.interceptor.MysqlInnerInterceptor; import net.mingsoft.interceptor.MysqlInnerInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
@ -57,15 +58,13 @@ public class WebConfig implements WebMvcConfigurer {
public ActionInterceptor actionInterceptor() { public ActionInterceptor actionInterceptor() {
return new ActionInterceptor(); return new ActionInterceptor();
} }
@Bean
public AppHandler appHandler() {
return new AppHandler();
}
@Bean @Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(DataSource dataSource) { public MybatisPlusInterceptor mybatisPlusInterceptor(DataSource dataSource,@Autowired(required = false) TenantLineHandler tenantLineHandler) {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(appHandler())); if(tenantLineHandler!=null){
interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(tenantLineHandler));
}
try { try {
//mysql 添加转换sql //mysql 添加转换sql
DbType dbType = JdbcUtils.getDbType(dataSource.getConnection().getMetaData().getURL()); DbType dbType = JdbcUtils.getDbType(dataSource.getConnection().getMetaData().getURL());

View File

@ -1,44 +0,0 @@
package net.mingsoft.handler;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import net.mingsoft.basic.util.BasicUtil;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.springframework.beans.factory.annotation.Value;
import java.util.ArrayList;
import java.util.Arrays;
public class AppHandler implements TenantLineHandler {
@Value("${ms.mwebsite.tables}")
private String[] tables;
@Override
public Expression getTenantId() {
//分页插件处理,会被执行两次,一次查询数量一次查询结果当查询到了数量之后当前线程变量就会被赋值再次startPage就会丢失数量所以判断拿到了数量就不再startPage
Page<Object> localPage = PageHelper.getLocalPage();
if(localPage!=null&&localPage.getTotal()==0){
PageHelper.clearPage();
}
//int appId = BasicUtil.getAppId();
if(localPage!=null&&localPage.getTotal()==0){
PageHelper.startPage(localPage.getPageNum(),localPage.getPageSize(),localPage.isCount());
PageHelper.orderBy(localPage.getOrderBy());
}
return new LongValue(1);
}
@Override
public String getTenantIdColumn() {
return "app_id";
}
@Override
public boolean ignoreTable(String tableName) {
return ArrayUtil.isEmpty(tables)|| !ArrayUtil.contains(tables,tableName);
}
}