|
@@ -4,9 +4,9 @@ import org.apache.commons.dbcp.DelegatingDatabaseMetaData;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.dbsyncer.common.util.CollectionUtils;
|
|
|
import org.dbsyncer.connector.config.DatabaseConfig;
|
|
|
+import org.dbsyncer.connector.config.SqlBuilderConfig;
|
|
|
import org.dbsyncer.connector.constant.DatabaseConstant;
|
|
|
import org.dbsyncer.connector.database.Database;
|
|
|
-import org.dbsyncer.connector.database.sqlbuilder.SqlBuilderQuery;
|
|
|
import org.dbsyncer.connector.enums.SqlBuilderEnum;
|
|
|
import org.dbsyncer.connector.mysql.MysqlConnector;
|
|
|
import org.dbsyncer.connector.util.DatabaseUtil;
|
|
@@ -31,7 +31,6 @@ import java.io.*;
|
|
|
import java.lang.reflect.Field;
|
|
|
import java.sql.Connection;
|
|
|
import java.sql.DatabaseMetaData;
|
|
|
-import java.sql.Timestamp;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
@@ -55,6 +54,7 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
|
|
|
private static final String PREFIX_TABLE = "dbsyncer_";
|
|
|
private static final String SHOW_TABLE = "show tables where Tables_in_%s = \"%s\"";
|
|
|
private static final String DROP_TABLE = "DROP TABLE %s";
|
|
|
+ private static final String TRUNCATE_TABLE = "TRUNCATE TABLE %s";
|
|
|
private static final String TABLE_CREATE_TIME = "create_time";
|
|
|
private static final String TABLE_UPDATE_TIME = "update_time";
|
|
|
|
|
@@ -70,13 +70,6 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
|
|
|
|
|
|
@PostConstruct
|
|
|
private void init() {
|
|
|
- config = null == config ? new DatabaseConfig() : config;
|
|
|
- config.setUrl(StringUtils.isNotBlank(config.getUrl()) ? config.getUrl()
|
|
|
- : "jdbc:mysql://127.0.0.1:3306/dbsyncer?rewriteBatchedStatements=true&seUnicode=true&characterEncoding=UTF8&useSSL=true");
|
|
|
- config.setDriverClassName(
|
|
|
- StringUtils.isNotBlank(config.getDriverClassName()) ? config.getDriverClassName() : "com.mysql.jdbc.Driver");
|
|
|
- config.setUsername(StringUtils.isNotBlank(config.getUsername()) ? config.getUsername() : "root");
|
|
|
- config.setPassword(StringUtils.isNotBlank(config.getPassword()) ? config.getPassword() : "123");
|
|
|
logger.info("url:{}", config.getUrl());
|
|
|
logger.info("driverClassName:{}", config.getDriverClassName());
|
|
|
logger.info("username:{}", config.getUsername());
|
|
@@ -140,8 +133,18 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
|
|
|
|
|
|
@Override
|
|
|
public void deleteAll(StorageEnum type, String table) {
|
|
|
- String sql = String.format(DROP_TABLE, PREFIX_TABLE.concat(table));
|
|
|
- jdbcTemplate.execute(sql);
|
|
|
+ Executor executor = getExecutor(type, table);
|
|
|
+ if(executor.isSystemType()){
|
|
|
+ String sql = String.format(TRUNCATE_TABLE, PREFIX_TABLE.concat(table));
|
|
|
+ jdbcTemplate.execute(sql);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (tables.containsKey(table)) {
|
|
|
+ tables.remove(table);
|
|
|
+ String sql = String.format(DROP_TABLE, PREFIX_TABLE.concat(table));
|
|
|
+ jdbcTemplate.execute(sql);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -151,7 +154,9 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
|
|
|
|
|
|
@Override
|
|
|
public void insertData(StorageEnum type, String table, List<Map> list) {
|
|
|
- executeInsert(type, table, list);
|
|
|
+ if (!CollectionUtils.isEmpty(list)) {
|
|
|
+ list.forEach(params -> executeInsert(type, table, params));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -176,12 +181,8 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
|
|
|
return insert;
|
|
|
}
|
|
|
|
|
|
- private void executeInsert(StorageEnum type, String table, List<Map> list) {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
private List<Object> getParams(Executor executor, Map params) {
|
|
|
- return executor.getFieldPairs().stream().map(p -> p.convert(params.get(p.labelName))).collect(Collectors.toList());
|
|
|
+ return executor.getFieldPairs().stream().map(p -> params.get(p.labelName)).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
private Executor getExecutor(StorageEnum type, String table) {
|
|
@@ -232,24 +233,22 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
|
|
|
new FieldPair(ConfigConstant.CONFIG_MODEL_ID),
|
|
|
new FieldPair(ConfigConstant.CONFIG_MODEL_NAME),
|
|
|
new FieldPair(ConfigConstant.CONFIG_MODEL_TYPE),
|
|
|
- new TimestampFieldPair(ConfigConstant.CONFIG_MODEL_CREATE_TIME, TABLE_CREATE_TIME),
|
|
|
- new TimestampFieldPair(ConfigConstant.CONFIG_MODEL_UPDATE_TIME, TABLE_UPDATE_TIME),
|
|
|
+ new FieldPair(ConfigConstant.CONFIG_MODEL_CREATE_TIME, TABLE_CREATE_TIME),
|
|
|
+ new FieldPair(ConfigConstant.CONFIG_MODEL_UPDATE_TIME, TABLE_UPDATE_TIME),
|
|
|
new FieldPair(ConfigConstant.CONFIG_MODEL_JSON));
|
|
|
// 日志
|
|
|
List<FieldPair> logFields = Arrays.asList(
|
|
|
new FieldPair(ConfigConstant.CONFIG_MODEL_ID),
|
|
|
- new FieldPair(ConfigConstant.CONFIG_MODEL_NAME),
|
|
|
new FieldPair(ConfigConstant.CONFIG_MODEL_TYPE),
|
|
|
- new TimestampFieldPair(ConfigConstant.CONFIG_MODEL_CREATE_TIME, TABLE_CREATE_TIME),
|
|
|
+ new FieldPair(ConfigConstant.CONFIG_MODEL_CREATE_TIME, TABLE_CREATE_TIME),
|
|
|
new FieldPair(ConfigConstant.CONFIG_MODEL_JSON));
|
|
|
// 数据
|
|
|
List<FieldPair> dataFields = Arrays.asList(
|
|
|
new FieldPair(ConfigConstant.CONFIG_MODEL_ID),
|
|
|
- new FieldPair(ConfigConstant.CONFIG_MODEL_NAME),
|
|
|
new FieldPair(ConfigConstant.DATA_SUCCESS),
|
|
|
new FieldPair(ConfigConstant.DATA_EVENT),
|
|
|
new FieldPair(ConfigConstant.DATA_ERROR),
|
|
|
- new TimestampFieldPair(ConfigConstant.CONFIG_MODEL_CREATE_TIME, TABLE_CREATE_TIME),
|
|
|
+ new FieldPair(ConfigConstant.CONFIG_MODEL_CREATE_TIME, TABLE_CREATE_TIME),
|
|
|
new FieldPair(ConfigConstant.CONFIG_MODEL_JSON));
|
|
|
tables.putIfAbsent(StorageEnum.CONFIG.getType(), new Executor(StorageEnum.CONFIG, configFields));
|
|
|
tables.putIfAbsent(StorageEnum.LOG.getType(), new Executor(StorageEnum.LOG, logFields));
|
|
@@ -279,12 +278,19 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
|
|
|
jdbcTemplate.execute(ddl);
|
|
|
}
|
|
|
|
|
|
- String pk = ConfigConstant.CONFIG_MODEL_ID;
|
|
|
- List<String> fieldName = executor.getFieldPairs().stream().map(p -> p.columnName).collect(Collectors.toList());
|
|
|
- String query = new SqlBuilderQuery().buildStandardSql(table, pk, fieldName, "", "");
|
|
|
- String insert = SqlBuilderEnum.INSERT.getSqlBuilder().buildSql(table, pk, fieldName, "", "", connector);
|
|
|
- String update = SqlBuilderEnum.UPDATE.getSqlBuilder().buildSql(table, pk, fieldName, "", "", connector);
|
|
|
- String delete = SqlBuilderEnum.DELETE.getSqlBuilder().buildSql(table, pk, fieldName, "", "", connector);
|
|
|
+ List<String> fieldNames = new ArrayList<>();
|
|
|
+ List<String> labelNames = new ArrayList<>();
|
|
|
+ executor.getFieldPairs().forEach(p -> {
|
|
|
+ fieldNames.add(p.columnName);
|
|
|
+ labelNames.add(p.labelName);
|
|
|
+ });
|
|
|
+ final SqlBuilderConfig config = new SqlBuilderConfig(connector, table, ConfigConstant.CONFIG_MODEL_ID, fieldNames, labelNames, "",
|
|
|
+ "");
|
|
|
+
|
|
|
+ String query = SqlBuilderEnum.QUERY.getSqlBuilder().buildQuerySql(config);
|
|
|
+ String insert = SqlBuilderEnum.INSERT.getSqlBuilder().buildSql(config);
|
|
|
+ String update = SqlBuilderEnum.UPDATE.getSqlBuilder().buildSql(config);
|
|
|
+ String delete = SqlBuilderEnum.DELETE.getSqlBuilder().buildSql(config);
|
|
|
executor.setQuery(query).setInsert(insert).setUpdate(update).setDelete(delete);
|
|
|
}
|
|
|
|
|
@@ -325,41 +331,19 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
|
|
|
this.config = config;
|
|
|
}
|
|
|
|
|
|
- interface FieldHandler {
|
|
|
- Object convert(Object val);
|
|
|
- }
|
|
|
-
|
|
|
class FieldPair {
|
|
|
- String labelName;
|
|
|
- String columnName;
|
|
|
- FieldHandler handler;
|
|
|
+ String labelName;
|
|
|
+ String columnName;
|
|
|
|
|
|
public FieldPair(String labelName) {
|
|
|
this.labelName = labelName;
|
|
|
this.columnName = labelName;
|
|
|
- this.handler = val -> val;
|
|
|
}
|
|
|
|
|
|
public FieldPair(String labelName, String columnName) {
|
|
|
this.labelName = labelName;
|
|
|
this.columnName = columnName;
|
|
|
}
|
|
|
-
|
|
|
- public Object convert(Object val) {
|
|
|
- return val;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- class TimestampFieldPair extends FieldPair {
|
|
|
-
|
|
|
- public TimestampFieldPair(String labelName, String columnName) {
|
|
|
- super(labelName, columnName);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public Object convert(Object val) {
|
|
|
- return new Timestamp((Long) val);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
class Executor {
|
|
@@ -370,16 +354,19 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
|
|
|
private StorageEnum group;
|
|
|
private List<FieldPair> fieldPairs;
|
|
|
private boolean dynamicTableName;
|
|
|
+ private boolean systemType;
|
|
|
|
|
|
public Executor(StorageEnum group, List<FieldPair> fieldPairs) {
|
|
|
this.group = group;
|
|
|
this.fieldPairs = fieldPairs;
|
|
|
+ this.systemType = true;
|
|
|
}
|
|
|
|
|
|
public Executor(StorageEnum group, List<FieldPair> fieldPairs, boolean dynamicTableName) {
|
|
|
this.group = group;
|
|
|
this.fieldPairs = fieldPairs;
|
|
|
this.dynamicTableName = dynamicTableName;
|
|
|
+ this.systemType = false;
|
|
|
}
|
|
|
|
|
|
public String getQuery() {
|
|
@@ -429,5 +416,9 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
|
|
|
public boolean isDynamicTableName() {
|
|
|
return dynamicTableName;
|
|
|
}
|
|
|
+
|
|
|
+ public boolean isSystemType() {
|
|
|
+ return systemType;
|
|
|
+ }
|
|
|
}
|
|
|
}
|