Commit 9d8042ad authored by 黎博's avatar 黎博

优化

parent 3a042fc0
...@@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j
...@@ -33,11 +34,12 @@ public class DbSyncController { ...@@ -33,11 +34,12 @@ public class DbSyncController {
@GetMapping("/one") @GetMapping("/one")
public JsonResult syncSingleTable(@RequestParam String namespace, @RequestParam String dbName, @RequestParam String tableName) { public JsonResult syncSingleTable(@RequestParam String namespace, @RequestParam String dbName, @RequestParam String tableName) {
try { try {
long startTime = System.currentTimeMillis();
Map<String, String> map = databaseSyncService.getMysqlInfoByNamespace(namespace); Map<String, String> map = databaseSyncService.getMysqlInfoByNamespace(namespace);
String destIp = map.get("ip"); String destIp = map.get("ip");
String destPort = map.get("port"); String destPort = map.get("port");
log.info("获取到{}环境的Mysql地址为:{}", namespace, destIp + ":" + destPort); log.info("获取到{}环境的Mysql地址为:{}", namespace, destIp + ":" + destPort);
if (tableName.equalsIgnoreCase("all")) { if (tableName.equalsIgnoreCase("all") || tableName.equals("")) {
log.info("开始同步{}库下所有的表", dbName); log.info("开始同步{}库下所有的表", dbName);
databaseSyncService.getDbInfoFromSource(ip, port, username, password, dbName); databaseSyncService.getDbInfoFromSource(ip, port, username, password, dbName);
databaseSyncService.syncDbToDest(destIp, destPort, "qa", "qatest", dbName); databaseSyncService.syncDbToDest(destIp, destPort, "qa", "qatest", dbName);
...@@ -46,7 +48,9 @@ public class DbSyncController { ...@@ -46,7 +48,9 @@ public class DbSyncController {
databaseSyncService.getSingleTableFromSource(ip, port, username, password, dbName, tableName); databaseSyncService.getSingleTableFromSource(ip, port, username, password, dbName, tableName);
databaseSyncService.syncSingleTableToDest(destIp, destPort, "qa", "qatest", dbName, tableName); databaseSyncService.syncSingleTableToDest(destIp, destPort, "qa", "qatest", dbName, tableName);
} }
return JsonResult.buildSuccessResult("同步成功!"); long endTime = System.currentTimeMillis();
long elapsedTime = (endTime - startTime) / 1000;
return JsonResult.buildSuccessResult(elapsedTime + "s");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return JsonResult.buildErrorStateResult("同步失败!", false); return JsonResult.buildErrorStateResult("同步失败!", false);
...@@ -70,6 +74,8 @@ public class DbSyncController { ...@@ -70,6 +74,8 @@ public class DbSyncController {
*/ */
@GetMapping("/tables") @GetMapping("/tables")
public JsonResult getTableList(@RequestParam String dbName) { public JsonResult getTableList(@RequestParam String dbName) {
return JsonResult.buildSuccessResult(databaseSyncService.getTableListByDb(ip, port, username, password, dbName)); List<Object> tableList = databaseSyncService.getTableListByDb(ip, port, username, password, dbName);
tableList.add(0, "all");
return JsonResult.buildSuccessResult(tableList);
} }
} }
...@@ -30,6 +30,12 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -30,6 +30,12 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
@Value("${cash_loan_flow.sql}") @Value("${cash_loan_flow.sql}")
private String cashLoanFlowSql; private String cashLoanFlowSql;
@Value("${contract.sql}")
private String contractSql;
@Value("${payment_center.sql}")
private String paymentCenterSql;
private final String dbSyncPrefix = "dbsync:"; private final String dbSyncPrefix = "dbsync:";
/** /**
...@@ -156,6 +162,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -156,6 +162,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
public boolean syncDbToDest(String ip, String port, String username, String password, String dbName) { public boolean syncDbToDest(String ip, String port, String username, String password, String dbName) {
String driver = "com.mysql.jdbc.Driver"; String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://" + ip + ":" + port; String url = "jdbc:mysql://" + ip + ":" + port;
String createTableKey = dbSyncPrefix + dbName + ":create" ; String createTableKey = dbSyncPrefix + dbName + ":create" ;
String insertTableKey = dbSyncPrefix + dbName + ":insert"; String insertTableKey = dbSyncPrefix + dbName + ":insert";
String dbRedisKey = dbSyncPrefix + dbName; String dbRedisKey = dbSyncPrefix + dbName;
...@@ -176,7 +183,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -176,7 +183,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
// 重新创建数据库 // 重新创建数据库
String createDbSql = redisUtils.get(dbRedisKey).toString(); String createDbSql = redisUtils.get(dbRedisKey).toString();
log.info("创建数据库:{}", createDbSql); log.info("重新创建数据库:{}", createDbSql);
preparedStatement = connection.prepareStatement(createDbSql); preparedStatement = connection.prepareStatement(createDbSql);
preparedStatement.execute(); preparedStatement.execute();
connection.close(); connection.close();
...@@ -188,25 +195,48 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -188,25 +195,48 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
// 从redis中获取要同步的表结构 // 从redis中获取要同步的表结构
List<Object> createTableRedisValue = redisUtils.lGet(createTableKey, 0, redisUtils.lGetListSize(createTableKey)); List<Object> createTableRedisValue = redisUtils.lGet(createTableKey, 0, redisUtils.lGetListSize(createTableKey));
Statement statement = newConnection.createStatement(); Statement statement = newConnection.createStatement();
log.info("开始同步表结构!");
long structureStartTime = System.currentTimeMillis();
for (Object sql: createTableRedisValue) { for (Object sql: createTableRedisValue) {
statement.addBatch(sql.toString()); statement.addBatch(sql.toString());
} }
statement.executeBatch(); statement.executeBatch();
statement.clearBatch(); statement.clearBatch();
long structureEndTime = System.currentTimeMillis();
log.info("表结构同步完成,共花费{}秒", (structureEndTime - structureStartTime) / 1000);
// 从redis中同步表数据 // 从redis中同步表数据
String insertTableRedisValue = redisUtils.get(insertTableKey).toString(); String insertTableRedisValue = redisUtils.get(insertTableKey).toString();
log.info("开始同步表数据!"); log.info("开始同步表数据!");
long dataStartTime = System.currentTimeMillis();
for (String insertSql: insertTableRedisValue.split("\n")) { for (String insertSql: insertTableRedisValue.split("\n")) {
statement.addBatch(insertSql); statement.addBatch(insertSql);
} }
statement.executeBatch(); statement.executeBatch();
statement.clearBatch(); statement.clearBatch();
log.info("表数据同步完成!"); long dataEndTime = System.currentTimeMillis();
log.info("表数据同步完成,共花费{}秒", (dataEndTime - dataStartTime) / 1000);
// 判断是否需要update // 判断是否需要update
if (dbName.equals("cash_loan_flow")) { if (dbName.equals("cash_loan_flow")) {
for (String sql: cashLoanFlowSql.split("\n")) { for (String sql: cashLoanFlowSql.split("\n")) {
log.info(sql); log.info("执行update sql: {}", sql);
statement.addBatch(sql);
}
statement.executeBatch();
statement.clearBatch();
}
if (dbName.equals("contract")) {
for (String sql: contractSql.split("\n")) {
log.info("执行update sql: {}", sql);
statement.addBatch(sql);
}
statement.executeBatch();
statement.clearBatch();
}
if (dbName.equals("payment_center")) {
for (String sql: paymentCenterSql.split("\n")) {
log.info("执行update sql: {}", sql);
statement.addBatch(sql); statement.addBatch(sql);
} }
statement.executeBatch(); statement.executeBatch();
...@@ -258,7 +288,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -258,7 +288,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
preparedStatement = connection.prepareStatement(sql); preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery(); ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) { while (resultSet.next()) {
redisUtils.set(tableCreateKey, resultSet.getString(2)); redisUtils.set(tableCreateKey, resultSet.getString(2), 600);
} }
} }
...@@ -292,7 +322,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -292,7 +322,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
insertSql = insertSql + "\n"; insertSql = insertSql + "\n";
insertRedisValue += insertSql; insertRedisValue += insertSql;
} }
redisUtils.set(tableInsertKey, insertRedisValue); redisUtils.set(tableInsertKey, insertRedisValue, 600);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
...@@ -346,6 +376,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -346,6 +376,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
statement.addBatch(insertSql); statement.addBatch(insertSql);
} }
statement.executeBatch(); statement.executeBatch();
statement.clearBatch();
connection.commit(); connection.commit();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
...@@ -434,7 +465,6 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -434,7 +465,6 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
params.put("serviceName", "mysql"); params.put("serviceName", "mysql");
params.put("type", "base"); params.put("type", "base");
String response = HttpClientUtils.doPostJson(tkeHost + "/service/details", headers, JSON.toJSONString(params)); String response = HttpClientUtils.doPostJson(tkeHost + "/service/details", headers, JSON.toJSONString(params));
log.info(response);
String mysqlIp = JsonPath.read(response, "$.data.lanIp").toString(); String mysqlIp = JsonPath.read(response, "$.data.lanIp").toString();
String mysqlPort = JsonPath.read(response, "$.data.portMappings[0].nodePort").toString(); String mysqlPort = JsonPath.read(response, "$.data.portMappings[0].nodePort").toString();
Map<String, String> result = new HashMap<>(); Map<String, String> result = new HashMap<>();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment