|
@@ -16,7 +16,14 @@ import org.dbsyncer.parser.TableGroupContext;
|
|
|
import org.dbsyncer.parser.ddl.DDLParser;
|
|
|
import org.dbsyncer.parser.event.RefreshOffsetEvent;
|
|
|
import org.dbsyncer.parser.flush.AbstractBufferActuator;
|
|
|
-import org.dbsyncer.parser.model.*;
|
|
|
+import org.dbsyncer.parser.model.Connector;
|
|
|
+import org.dbsyncer.parser.model.FieldMapping;
|
|
|
+import org.dbsyncer.parser.model.Mapping;
|
|
|
+import org.dbsyncer.parser.model.Meta;
|
|
|
+import org.dbsyncer.parser.model.TableGroup;
|
|
|
+import org.dbsyncer.parser.model.TableGroupPicker;
|
|
|
+import org.dbsyncer.parser.model.WriterRequest;
|
|
|
+import org.dbsyncer.parser.model.WriterResponse;
|
|
|
import org.dbsyncer.parser.strategy.FlushStrategy;
|
|
|
import org.dbsyncer.parser.util.ConvertUtil;
|
|
|
import org.dbsyncer.plugin.PluginFactory;
|
|
@@ -28,6 +35,8 @@ import org.dbsyncer.sdk.enums.ChangedEventTypeEnum;
|
|
|
import org.dbsyncer.sdk.model.ConnectorConfig;
|
|
|
import org.dbsyncer.sdk.model.Field;
|
|
|
import org.dbsyncer.sdk.model.MetaInfo;
|
|
|
+import org.dbsyncer.sdk.schema.SchemaResolver;
|
|
|
+import org.dbsyncer.sdk.spi.ConnectorService;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.context.ApplicationContext;
|
|
@@ -166,8 +175,13 @@ public class GeneralBufferActuator extends AbstractBufferActuator<WriterRequest,
|
|
|
|
|
|
private void distributeTableGroup(WriterResponse response, Mapping mapping, TableGroupPicker tableGroupPicker, List<Field> sourceFields, boolean enableFilter) {
|
|
|
// 1、映射字段
|
|
|
+ boolean enableSchemaResolver = profileComponent.getSystemConfig().isEnableSchemaResolver();
|
|
|
+ ConnectorConfig sourceConfig = getConnectorConfig(mapping.getSourceConnectorId());
|
|
|
+ ConnectorService sourceConnector = connectorFactory.getConnectorService(sourceConfig.getConnectorType());
|
|
|
List<Map> sourceDataList = new ArrayList<>();
|
|
|
- List<Map> targetDataList = tableGroupPicker.getPicker().pickTargetData(sourceFields, enableFilter, response.getDataList(), sourceDataList);
|
|
|
+ List<Map> targetDataList = tableGroupPicker.getPicker()
|
|
|
+ .setSourceResolver(enableSchemaResolver ? sourceConnector.getSchemaResolver() : null)
|
|
|
+ .pickTargetData(sourceFields, enableFilter, response.getDataList(), sourceDataList);
|
|
|
if (CollectionUtils.isEmpty(targetDataList)) {
|
|
|
return;
|
|
|
}
|
|
@@ -178,7 +192,7 @@ public class GeneralBufferActuator extends AbstractBufferActuator<WriterRequest,
|
|
|
|
|
|
// 3、插件转换
|
|
|
final IncrementPluginContext context = new IncrementPluginContext();
|
|
|
- context.setSourceConnectorInstance(connectorFactory.connect(getConnectorConfig(mapping.getSourceConnectorId())));
|
|
|
+ context.setSourceConnectorInstance(connectorFactory.connect(sourceConfig));
|
|
|
context.setTargetConnectorInstance(connectorFactory.connect(getConnectorConfig(mapping.getTargetConnectorId())));
|
|
|
context.setSourceTableName(tableGroup.getSourceTable().getName());
|
|
|
context.setTargetTableName(tableGroup.getTargetTable().getName());
|
|
@@ -190,7 +204,7 @@ public class GeneralBufferActuator extends AbstractBufferActuator<WriterRequest,
|
|
|
context.setTargetList(targetDataList);
|
|
|
context.setPluginExtInfo(tableGroup.getPluginExtInfo());
|
|
|
context.setForceUpdate(mapping.isForceUpdate());
|
|
|
- context.setEnableSchemaResolver(profileComponent.getSystemConfig().isEnableSchemaResolver());
|
|
|
+ context.setEnableSchemaResolver(enableSchemaResolver);
|
|
|
pluginFactory.process(tableGroup.getPlugin(), context, ProcessEnum.CONVERT);
|
|
|
|
|
|
// 4、批量执行同步
|
|
@@ -220,7 +234,7 @@ public class GeneralBufferActuator extends AbstractBufferActuator<WriterRequest,
|
|
|
String targetTableName = tableGroup.getTargetTable().getName();
|
|
|
List<FieldMapping> originalFieldMappings = tableGroup.getFieldMapping();
|
|
|
DDLConfig targetDDLConfig = ddlParser.parseDDlConfig(response.getSql(), tConnType, targetTableName, originalFieldMappings);
|
|
|
- final ConnectorInstance tConnectorInstance = connectorFactory.connect(tConnConfig);
|
|
|
+ ConnectorInstance tConnectorInstance = connectorFactory.connect(tConnConfig);
|
|
|
Result result = connectorFactory.writerDDL(tConnectorInstance, targetDDLConfig);
|
|
|
result.setTableGroupId(tableGroup.getId());
|
|
|
result.setTargetTableGroupName(targetTableName);
|