Bladeren bron

rwd: 修改分表实现

yaoll 4 jaren geleden
bovenliggende
commit
a224d2d48c

+ 9 - 11
dmp-rwd/doc/config.sql

@@ -16,16 +16,14 @@ VALUES
 ('dmp-rwd','default','master','DMP',1,'eureka.instance.prefer-ip-address','true',null),
 ('dmp-rwd','default','master','DMP',1,'eureka.instance.instance-id','${spring.cloud.client.ip-address}:${server.port}',null),
 
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.props.sql.show', 'false', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.names', 'ds0', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.type', 'com.alibaba.druid.pool.DruidDataSource', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.driverClassName', 'com.mysql.cj.jdbc.Driver', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.url', 'jdbc:mysql://${persagy.mysql.host}:${persagy.mysql.port}/${persagy.mysql.database}?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.username', '${persagy.mysql.username}', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.password', '${persagy.mysql.password}', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.initialSize', '${persagy.mysql.initialSize}', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.maxActive', '${persagy.mysql.maxActive}', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.sharding.default-data-source-name', 'ds0', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.type', 'com.alibaba.druid.pool.DruidDataSource', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.driverClassName', 'com.mysql.cj.jdbc.Driver', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.url', 'jdbc:mysql://${persagy.mysql.host}:${persagy.mysql.port}/${persagy.mysql.database}?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.username', '${persagy.mysql.username}', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.password', '${persagy.mysql.password}', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.max-active', '${persagy.mysql.maxActive}', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.max-idle', '20', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.min-idle', '10', null),
 
 ('dmp-rwd','default','master','DMP',1,'spring.rabbitmq.host', '${persagy.rabbitmq.host}', null),
 ('dmp-rwd','default','master','DMP',1,'spring.rabbitmq.port', '${persagy.rabbitmq.port}', null),
@@ -51,7 +49,7 @@ VALUES
 ('dmp-rwd','dev','master','DMP',1,'server.port', '8080', null),
 
 ('dmp-rwd','dev','master','DMP',1,'eureka.client.service-url.defaultZone','http://frame:123456@localhost:9931/eureka/','注册中心地址'),
-('dmp-rwd','dev','master','DMP',1,'eureka.instance.ip-address','localhost',null),
+
 ('dmp-rwd','dev','master','DMP',1,'persagy.iot.data.server', 'http://localhost:9981', 'IOT数据查询服务'),
 ('dmp-rwd','dev','master','DMP',1,'persagy.iot.setting.server', 'http://localhost:9983', 'IOT控制服务'),
 

+ 1 - 6
dmp-rwd/pom.xml

@@ -71,12 +71,7 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-        <!-- 分库分表 -->
-        <dependency>
-            <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
-            <version>4.1.1</version>
-        </dependency>
+
         <!-- 注册中心 -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>

+ 0 - 2
dmp-rwd/src/main/java/com/persagy/dmp/rwd/config/GlobalExceptionHandler.java

@@ -2,7 +2,6 @@ package com.persagy.dmp.rwd.config;
 
 import com.persagy.common.web.BaseResponse;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.sharding.route.engine.validator.impl.ShardingUpdateStatementValidator;
 import org.springframework.dao.DataAccessException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -23,7 +22,6 @@ public class GlobalExceptionHandler {
 		BaseResponse<String> resp = new BaseResponse<>();
 		resp.setFail("服务异常: " + ex.getMessage());
 		log.error("服务异常", ex);
-		ShardingUpdateStatementValidator va;
 		return resp;
 	}
 

+ 63 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/config/JpaSqlExecuteContext.java

@@ -0,0 +1,63 @@
+package com.persagy.dmp.rwd.config;
+
+import lombok.Data;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author: yaoll
+ * @date: 2020-12-20
+ * @verison: 1.0
+ */
+public class JpaSqlExecuteContext extends HandlerInterceptorAdapter {
+
+	private static final ThreadLocal<Param> param = new ThreadLocal();
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		this.init(request.getParameter("groupCode"), request.getParameter("projectId"));
+		return true;
+	}
+
+	@Override
+	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+		this.clear();
+	}
+
+	@Override
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+		this.clear();
+	}
+
+
+	@Data
+	public static class Param {
+		private String groupCode;
+		private String projectId;
+	}
+
+	public static void init(String groupCode, String projectId) {
+		if (param.get() == null) {
+			param.set(new Param());
+		}
+		param.get().groupCode = groupCode;
+		param.get().projectId = projectId;
+	}
+
+	public static void clear() {
+		param.remove();
+		param.set(null);
+	}
+
+	public static String getGroupCode() {
+		return param.get().groupCode;
+	}
+
+	public static String getProjectId() {
+		return param.get().projectId;
+	}
+
+}

+ 6 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/config/WebConfig.java

@@ -24,10 +24,16 @@ public class WebConfig implements WebMvcConfigurer {
 		return new DmpParameterStorage();
 	}
 
+	@Bean
+	public JpaSqlExecuteContext jpaSqlExecuteContext() {
+		return new JpaSqlExecuteContext();
+	}
+
 	@Override
 	public void addInterceptors(InterceptorRegistry registry) {
 		// 设置拦截的路径、不拦截的路径、优先级等等
 		registry.addInterceptor(dmpParameterStorage()).addPathPatterns("/**");
+		registry.addInterceptor(jpaSqlExecuteContext()).addPathPatterns("/**");
 	}
 
 	@Bean

+ 6 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/BaseService.java

@@ -4,6 +4,7 @@ import com.persagy.common.criteria.CriteriaUtils;
 import com.persagy.common.criteria.JpaUtils;
 import com.persagy.common.web.BaseResponse;
 import com.persagy.dmp.config.DmpParameterStorage;
+import com.persagy.dmp.rwd.config.JpaSqlExecuteContext;
 import com.persagy.dmp.rwd.config.RwdConstants;
 import com.persagy.dmp.rwd.repository.*;
 import com.querydsl.jpa.impl.JPAQueryFactory;
@@ -69,6 +70,11 @@ public class BaseService {
     @Autowired
     protected SchemaProjectRepository schemaProjectRepository;
 
+    protected void setSharding(String groupCode, String projectId){
+        JpaSqlExecuteContext.init(groupCode, projectId);
+    }
+
+
     protected static class OrgParam {
         String groupCode;
         String schemaId;

+ 6 - 3
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ClassDefService.java

@@ -77,6 +77,7 @@ public class ClassDefService extends BaseService {
 		jacksonCriteria.add("type", "common");
 		jacksonCriteria.add("groupCode", "0");
 		jacksonCriteria.setWithoutCount(true);
+		setSharding("0", "0"); // sharding
 		PagedResponse<ClassDefModel> queryResponse = query(jacksonCriteria);
 		for (ClassDefModel model : queryResponse.getData()) {
 			map.put(model.getCode(), model);
@@ -89,6 +90,7 @@ public class ClassDefService extends BaseService {
 			groupCriteria.add("type", "group");
 			groupCriteria.add("groupCode", orgParam.groupCode);
 			jacksonCriteria.setWithoutCount(true);
+			setSharding(orgParam.groupCode, "0"); // sharding
 			queryResponse = query(groupCriteria);
 			for (ClassDefModel model : queryResponse.getData()) {
 				map.put(model.getCode(), model);
@@ -103,6 +105,7 @@ public class ClassDefService extends BaseService {
 			jacksonCriteria.add("groupCode", orgParam.groupCode);
 			jacksonCriteria.add("projectId", orgParam.projectId);
 			jacksonCriteria.setWithoutCount(true);
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			queryResponse = query(jacksonCriteria);
 			for (ClassDefModel model : queryResponse.getData()) {
 				map.put(model.getCode(), model);
@@ -112,6 +115,7 @@ public class ClassDefService extends BaseService {
 		// 筛选方案订阅
 		if (orgParam.schemaId != null && !"0".equalsIgnoreCase(orgParam.schemaId)) {
 			QSchemaClass qsc = QSchemaClass.schemaClass;
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			Iterable<SchemaClass> all = schemaClassRepository.findAll(qsc.schemaId.eq(orgParam.schemaId).and(qsc.groupCode.eq(orgParam.groupCode)));
 			Set<String> classCodes = new HashSet<>();
 			for (SchemaClass item : all) {
@@ -133,6 +137,7 @@ public class ClassDefService extends BaseService {
 		// 筛选应用订阅部分
 		if (orgParam.appId != null && !"0".equalsIgnoreCase(orgParam.appId)) {
 			QAppClass qac = QAppClass.appClass;
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			Iterable<AppClass> all = appClassRepository.findAll(qac.appId.eq(appId).and(qac.groupCode.eq(orgParam.groupCode).and(qac.projectId.eq(orgParam.projectId))));
 			Set<String> classCodes = new HashSet<>();
 			for (AppClass item : all) {
@@ -156,8 +161,6 @@ public class ClassDefService extends BaseService {
 
 			//List<FuncidDataType> enumTypeList = Arrays.asList(FuncidDataType.ENUM);
 			List<String> classCodeList = map.values().stream().map(ClassDefModel::getCode).collect(Collectors.toList());
-			Map<String, FuncidDef> funcidCache = new HashMap<>();
-
 			JacksonCriteria funcidCriteria = JacksonCriteria.newInstance();
 			funcidCriteria.add("classCode").in(classCodeList);
 			funcidCriteria.add("dataType", FuncidDataType.ENUM);
@@ -181,7 +184,7 @@ public class ClassDefService extends BaseService {
 				}
 
 				for (JsonNode jsonNode : dataSource) {
-					com.fasterxml.jackson.databind.node.ObjectNode item = (com.fasterxml.jackson.databind.node.ObjectNode) jsonNode;
+					ObjectNode item = (ObjectNode) jsonNode;
 					ClassDefModel model = new ClassDefModel();
 					BeanUtils.copyProperties(classDefModel, model);
 					model.setCode(classDefModel.getCode() + "&" + funcid.getCode() + "=" + item.get("code").asText());

+ 7 - 3
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/FuncidDefService.java

@@ -79,6 +79,7 @@ public class FuncidDefService extends BaseService {
 				return resp;
 			}
 			QSchemaProject pqt = QSchemaProject.schemaProject;
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			Optional<SchemaProject> one = schemaProjectRepository.findOne(pqt.projectId.eq(orgParam.projectId).and(pqt.groupCode.eq(orgParam.groupCode)));
 			if (one.isPresent()) {
 				orgParam.schemaId = one.get().getSchemaId();
@@ -106,6 +107,7 @@ public class FuncidDefService extends BaseService {
 				String infoCode = funcid.getCode();
 				if (!classInfoCodeCache.containsKey(classCode)) {
 					QSchemaFuncid qsf = QSchemaFuncid.schemaFuncid;
+					setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 					Iterable<SchemaFuncid> all = schemaFuncidRepository.findAll(qsf.groupCode.eq(orgParam.groupCode).and(qsf.schemaId.eq(orgParam.schemaId).and(qsf.classCode.eq(classCode))));
 					Set<String> set = new HashSet<>();
 					for (SchemaFuncid schemaFuncid : all) {
@@ -130,6 +132,7 @@ public class FuncidDefService extends BaseService {
 				String infoCode = funcid.getCode();
 				if (!classInfoCodeCache.containsKey(classCode)) {
 					QAppFuncid qaf = QAppFuncid.appFuncid;
+					setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 					Iterable<AppFuncid> all = appFuncidRepository.findAll(qaf.appId.eq(orgParam.appId)
 							.and(qaf.groupCode.eq(orgParam.groupCode))
 							.and(qaf.projectId.eq(orgParam.projectId))
@@ -152,13 +155,10 @@ public class FuncidDefService extends BaseService {
 	}
 
 	private List<FuncidDefModel> queryWithClassCode(OrgParam orgParam, ListResponse<FuncidDefModel> resp, JacksonCriteria request) {
-		Map<String, FuncidDefModel> cache = new HashMap<>();
 		JsonNode classCode = request.getCriteria().get("classCode");
-
 		JacksonCriteria criteria = JacksonCriteria.newInstance();
 		criteria.getCriteria().set("code", classCode);
 		criteria.setWithoutCount(true);
-		System.out.println("query class " + JacksonMapper.toSimpleJson(criteria));
 		ListResponse<ClassDefModel> classDefModelListResponse = classDefService.queryClass(orgParam.groupCode, orgParam.schemaId, orgParam.projectId, orgParam.appId, false, criteria);
 		List<ClassDefModel> classDefModelList = classDefModelListResponse.getData();
 		List<FuncidDefModel> list = new LinkedList<>();
@@ -191,7 +191,9 @@ public class FuncidDefService extends BaseService {
 		criteria.add("type", "common");
 		criteria.add("groupCode", "0");
 		criteria.setWithoutCount(true);
+		setSharding("0", "0"); // sharding
 		PagedResponse<FuncidDefModel> queryResp = query(criteria);
+
 		queryResp.getData().forEach(model -> cache.put(model.getClassCode() + "-" + model.getCode(), model));
 
 		// 查询集团级
@@ -201,6 +203,7 @@ public class FuncidDefService extends BaseService {
 			criteria.add("type", "group");
 			criteria.add("groupCode", orgParam.groupCode);
 			criteria.setWithoutCount(true);
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			queryResp = query(criteria);
 			queryResp.getData().forEach(model -> cache.put(model.getClassCode() + "-" + model.getCode(), model));
 		}
@@ -212,6 +215,7 @@ public class FuncidDefService extends BaseService {
 			criteria.add("groupCode", orgParam.groupCode);
 			criteria.add("projectId", orgParam.projectId);
 			criteria.setWithoutCount(true);
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			queryResp = query(criteria);
 			queryResp.getData().forEach(model -> cache.put(model.getClassCode() + "-" + model.getCode(), model));
 		}

+ 1 - 1
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ObjectInstanceQueryService.java

@@ -101,7 +101,7 @@ public class ObjectInstanceQueryService extends BaseService {
 			if (RwdConstants.isBasicColumn(infoCode) || set.contains(infoCode)) {
 				continue;
 			}
-			String exp = "JSON_EXTRACT({0}, '$." + infoCode + "')";
+			String exp = "json_extract({0}, '$." + infoCode + "')";
 			JsonNode value = object.get(infoCode);
 			FuncidDataType funcidDataType = parseDataType(value);
 			if (funcidDataType == FuncidDataType.STRING) {

+ 0 - 41
dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/GroupProjectShardingAlgorithm.java

@@ -1,41 +0,0 @@
-package com.persagy.dmp.rwd.sharding;
-
-import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingAlgorithm;
-import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingValue;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author: yaoll
- * @date: 2020-10-30
- * @verison: 1.0
- */
-public class GroupProjectShardingAlgorithm implements ComplexKeysShardingAlgorithm<String> {
-
-	@Override
-	public Collection<String> doSharding(Collection<String> availableTargetNames, ComplexKeysShardingValue<String> shardingValue) {
-		String logicTableName = shardingValue.getLogicTableName();
-		Map<String, Collection<String>> columnNameAndShardingValuesMap = shardingValue.getColumnNameAndShardingValuesMap();
-		Collection<String> groupCodes = columnNameAndShardingValuesMap.get("group_code");
-		Collection<String> projectIds = columnNameAndShardingValuesMap.get("project_id");
-		Set<String> result = new HashSet<>();
-		if (groupCodes == null || groupCodes.size() == 0 || projectIds == null || projectIds.size() == 0) {
-			result.add(logicTableName);
-		} else {
-			for (String groupCode : groupCodes) {
-				for (String projectId : projectIds) {
-					if ("0".equals(groupCode)) {
-						result.add(logicTableName);
-					} else {
-						result.add(logicTableName + "_" + groupCode.toLowerCase() + "_" + projectId.toLowerCase());
-					}
-				}
-			}
-		}
-		return result;
-	}
-
-}

+ 0 - 28
dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/GroupShardingAlgorithm.java

@@ -1,28 +0,0 @@
-package com.persagy.dmp.rwd.sharding;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
-import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
-
-import java.util.Collection;
-
-/**
- * @author: yaoll
- * @date: 2020-10-28
- * @verison: 1.0
- */
-@Slf4j
-public class GroupShardingAlgorithm implements PreciseShardingAlgorithm<String> {
-
-	@Override
-	public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<String> shardingValue) {
-		String logicTableName = shardingValue.getLogicTableName();
-		String value = shardingValue.getValue();
-		if (value == null || "0".equals(value)) {
-			return logicTableName;
-		} else {
-			return logicTableName + "_" + value.toLowerCase();
-		}
-	}
-
-}

+ 86 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/JpaSqlStatementInspector.java

@@ -0,0 +1,86 @@
+package com.persagy.dmp.rwd.sharding;
+
+import com.persagy.dmp.rwd.config.JpaSqlExecuteContext;
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.resource.jdbc.spi.StatementInspector;
+
+/**
+ * @author: yaoll
+ * @date: 2020-12-20
+ * @verison: 1.0
+ */
+@Slf4j
+public class JpaSqlStatementInspector implements StatementInspector {
+
+	private final static String TABLE_DEF_CLASS = "rwd_def_class";
+	private final static String TABLE_DEF_FUNCID = "rwd_def_funcid";
+
+	private final static String TABLE_SCHEMA = "rwd_schema";
+	private final static String TABLE_SCHEMA_CLASS = "rwd_schema_class";
+	private final static String TABLE_SCHEMA_FUNCID = "rwd_schema_funcid";
+	private final static String TABLE_SCHEMA_PROJECT = "rwd_schema_project";
+
+	private final static String TABLE_APP_CLASS = "rwd_app_class";
+	private final static String TABLE_APP_FUNCID = "rwd_app_funcid";
+
+	private final static String TABLE_INSTANCE_GRAPH = "rwd_graph";
+	private final static String TABLE_INSTANCE_OBJEC = "rwd_object";
+	private final static String TABLE_INSTANCE_INSTANCE = "rwd_relation";
+
+
+	@Override
+	public String inspect(String sql) {
+		// 只拦截dml
+		if (sql.startsWith("select") || sql.startsWith("update") || sql.startsWith("delete") || sql.startsWith("insert")) {
+			log.info("sql inspector: {}", sql);
+
+			sql = execute(sql, TABLE_DEF_CLASS, groupTableStrategy);
+			sql = execute(sql, TABLE_DEF_FUNCID, groupTableStrategy);
+
+			sql = execute(sql, TABLE_SCHEMA, groupTableStrategy);
+			sql = execute(sql, TABLE_SCHEMA_CLASS, groupTableStrategy);
+			sql = execute(sql, TABLE_SCHEMA_FUNCID, groupTableStrategy);
+			sql = execute(sql, TABLE_SCHEMA_PROJECT, groupTableStrategy);
+
+			sql = execute(sql, TABLE_APP_CLASS, groupTableStrategy);
+			sql = execute(sql, TABLE_APP_FUNCID, groupTableStrategy);
+
+			sql = execute(sql, TABLE_INSTANCE_GRAPH, groupProjectTableStrategy);
+			sql = execute(sql, TABLE_INSTANCE_OBJEC, groupProjectTableStrategy);
+			sql = execute(sql, TABLE_INSTANCE_INSTANCE, groupProjectTableStrategy);
+		}
+		log.info("sql result: {}", sql);
+		return sql;
+	}
+
+	private String execute(String sql, String logicName, TableStrategy strategy) {
+		if (sql.indexOf(" " + logicName + " ") > -1) {
+			String actualName = strategy.strategy(logicName);
+			sql = sql.replaceAll(" " + logicName + " ", " " + actualName + " ");
+			log.info("sql actual table: {}", actualName);
+		}
+		return sql;
+	}
+
+	public interface TableStrategy {
+		String strategy(String logicName);
+	}
+
+	private TableStrategy groupTableStrategy = logicName -> {
+		String groupCode = JpaSqlExecuteContext.getGroupCode();
+		if (groupCode == null || "0".equals(groupCode)) {
+			return logicName;
+		}
+		return logicName + "_" + groupCode.toLowerCase().trim();
+	};
+
+	private TableStrategy groupProjectTableStrategy = logicName -> {
+		String groupCode = JpaSqlExecuteContext.getGroupCode();
+		String projectId = JpaSqlExecuteContext.getProjectId();
+		if (groupCode == null || projectId == null || "0".equals(groupCode) || "0".equals(projectId)) {
+			return logicName;
+		}
+		return logicName + "_" + groupCode.toLowerCase().trim() + "_" + projectId.toLowerCase().trim();
+	};
+
+}

+ 18 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/JsonDialect.java

@@ -0,0 +1,18 @@
+package com.persagy.dmp.rwd.sharding;
+
+import org.hibernate.dialect.MySQL57Dialect;
+import org.hibernate.dialect.function.StandardSQLFunction;
+import org.hibernate.type.StandardBasicTypes;
+
+/**
+ * @author: yaoll
+ * @date: 2020-12-20
+ * @verison: 1.0
+ */
+public class JsonDialect extends MySQL57Dialect {
+
+	public JsonDialect() {
+		this.registerFunction("json_extract", new StandardSQLFunction("json_extract", StandardBasicTypes.STRING));
+		this.registerFunction("json_unquote", new StandardSQLFunction("json_unquote", StandardBasicTypes.STRING));
+	}
+}

+ 8 - 80
dmp-rwd/src/main/resources/application.yml

@@ -1,81 +1,9 @@
 spring:
-  shardingsphere:
-    sharding:
-      tables:
-        rwd_def_class:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_def_class
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_def_funcid:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_def_funcid
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_schema:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_schema
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_schema_class:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_shema_class
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_schema_funcid:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_schema_funcid
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_schema_project:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_schema_project
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_app_class:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_app_class
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_app_funcid:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_app_funcid
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_object:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_object
-          key-generator-column-name: id
-          tableStrategy:
-            complex:
-              sharding-columns: group_code,project_id
-              algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupProjectShardingAlgorithm
-        rwd_graph:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_graph
-          key-generator-column-name: id
-          tableStrategy:
-            complex:
-              sharding-columns: group_code,project_id
-              algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupProjectShardingAlgorithm
-        rwd_relation:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_relation
-          key-generator-column-name: id
-          tableStrategy:
-            complex:
-              sharding-columns: group_code,project_id
-              algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupProjectShardingAlgorithm
+  jpa:
+    properties:
+      hibernate:
+        dialect: com.persagy.dmp.rwd.sharding.JsonDialect
+        session_factory:
+          statement_inspector: com.persagy.dmp.rwd.sharding.JpaSqlStatementInspector
+    hibernate:
+      ddl-auto: none