Commit 3a042fc0 authored by 黎博's avatar 黎博

优化

parent ef9d7726
...@@ -2,15 +2,17 @@ package cn.qg.holmes.controller.effect; ...@@ -2,15 +2,17 @@ package cn.qg.holmes.controller.effect;
import cn.qg.holmes.common.JsonResult; import cn.qg.holmes.common.JsonResult;
import cn.qg.holmes.service.effect.DatabaseSyncService; import cn.qg.holmes.service.effect.DatabaseSyncService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; 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.Map; import java.util.Map;
@Slf4j
@CrossOrigin @CrossOrigin
@RestController @RestController
@RequestMapping("/db/sync") @RequestMapping("/dbsync")
public class DbSyncController { public class DbSyncController {
@Autowired @Autowired
...@@ -28,35 +30,34 @@ public class DbSyncController { ...@@ -28,35 +30,34 @@ public class DbSyncController {
@Value("${dbsync.mysql.password}") @Value("${dbsync.mysql.password}")
private String password; private String password;
@GetMapping("/db") @GetMapping("/one")
public JsonResult syncSingleDatabase(@RequestParam String namespace, @RequestParam String dbName) {
long startTime = System.currentTimeMillis();
databaseSyncService.getDbInfoFromSource(ip, port, username, password, dbName);
Map<String, String> map = databaseSyncService.getMysqlInfoByNamespace(namespace);
String destIp = map.get("ip");
String destPort = map.get("port");
databaseSyncService.syncDbToDest(destIp, destPort, "qa", "qatest", dbName);
long endTime = System.currentTimeMillis();
return JsonResult.buildSuccessResult((endTime - startTime) / 1000);
}
@GetMapping("/table")
public JsonResult syncSingleTable(@RequestParam String namespace, @RequestParam String dbName, @RequestParam String tableName) { public JsonResult syncSingleTable(@RequestParam String namespace, @RequestParam String dbName, @RequestParam String tableName) {
long startTime = System.currentTimeMillis(); try {
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");
databaseSyncService.getSingleTableFromSource(ip, port, username, password, dbName, tableName); log.info("获取到{}环境的Mysql地址为:{}", namespace, destIp + ":" + destPort);
databaseSyncService.syncSingleTableToDest(destIp, destPort, "qa", "qatest", dbName, tableName); if (tableName.equalsIgnoreCase("all")) {
long endTime = System.currentTimeMillis(); log.info("开始同步{}库下所有的表", dbName);
return JsonResult.buildSuccessResult((endTime - startTime) / 1000); databaseSyncService.getDbInfoFromSource(ip, port, username, password, dbName);
databaseSyncService.syncDbToDest(destIp, destPort, "qa", "qatest", dbName);
} else {
log.info("开始同步{}库下{}表", dbName, tableName);
databaseSyncService.getSingleTableFromSource(ip, port, username, password, dbName, tableName);
databaseSyncService.syncSingleTableToDest(destIp, destPort, "qa", "qatest", dbName, tableName);
}
return JsonResult.buildSuccessResult("同步成功!");
} catch (Exception e) {
e.printStackTrace();
return JsonResult.buildErrorStateResult("同步失败!", false);
}
} }
/** /**
* 获取数据库列表 * 获取数据库列表
* @return * @return
*/ */
@GetMapping("/dblist") @GetMapping("/dbs")
public JsonResult getDatabaseList() { public JsonResult getDatabaseList() {
return JsonResult.buildSuccessResult(databaseSyncService.getDatabaseList(ip, port, username, password)); return JsonResult.buildSuccessResult(databaseSyncService.getDatabaseList(ip, port, username, password));
} }
...@@ -64,10 +65,10 @@ public class DbSyncController { ...@@ -64,10 +65,10 @@ public class DbSyncController {
/** /**
* 获取某个库下的表列表 * 获取某个库下的表列表
* @param dbName * @param dbName 数据库名
* @return * @return
*/ */
@GetMapping("/tablelist") @GetMapping("/tables")
public JsonResult getTableList(@RequestParam String dbName) { public JsonResult getTableList(@RequestParam String dbName) {
return JsonResult.buildSuccessResult(databaseSyncService.getTableListByDb(ip, port, username, password, dbName)); return JsonResult.buildSuccessResult(databaseSyncService.getTableListByDb(ip, port, username, password, dbName));
} }
......
...@@ -34,10 +34,10 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -34,10 +34,10 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
/** /**
* 从中间库获取数据库相关信息 * 从中间库获取数据库相关信息
* @param ip mysql ip * @param ip 中间库 ip
* @param port mysql port * @param port 中间库 port
* @param username mysql用户名 * @param username 中间库用户名
* @param password mysql密码 * @param password 中间库密码
* @param dbName 数据库名 * @param dbName 数据库名
* @return * @return
*/ */
...@@ -48,7 +48,6 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -48,7 +48,6 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
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;
Connection connection = null; Connection connection = null;
PreparedStatement preparedStatement = null; PreparedStatement preparedStatement = null;
...@@ -144,6 +143,15 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -144,6 +143,15 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
return true; return true;
} }
/**
* 同步数据库信息到目标地址
* @param ip 目标库ip
* @param port 目标库端口
* @param username 目标库用户名
* @param password 目标库密码
* @param dbName 目标库名称
* @return
*/
@Override @Override
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";
...@@ -181,9 +189,6 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -181,9 +189,6 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
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();
for (Object sql: createTableRedisValue) { for (Object sql: createTableRedisValue) {
// log.info("开始同步表结构:\n {}", sql.toString());
// preparedStatement = newConnection.prepareStatement(sql.toString());
// preparedStatement.execute();
statement.addBatch(sql.toString()); statement.addBatch(sql.toString());
} }
statement.executeBatch(); statement.executeBatch();
...@@ -193,9 +198,6 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -193,9 +198,6 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
String insertTableRedisValue = redisUtils.get(insertTableKey).toString(); String insertTableRedisValue = redisUtils.get(insertTableKey).toString();
log.info("开始同步表数据!"); log.info("开始同步表数据!");
for (String insertSql: insertTableRedisValue.split("\n")) { for (String insertSql: insertTableRedisValue.split("\n")) {
// log.info(insertSql);
// preparedStatement = newConnection.prepareStatement(insertSql);
// preparedStatement.execute();
statement.addBatch(insertSql); statement.addBatch(insertSql);
} }
statement.executeBatch(); statement.executeBatch();
...@@ -204,6 +206,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -204,6 +206,7 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
// 判断是否需要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);
statement.addBatch(sql); statement.addBatch(sql);
} }
statement.executeBatch(); statement.executeBatch();
...@@ -440,6 +443,15 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService { ...@@ -440,6 +443,15 @@ public class DatabaseSyncServiceImpl implements DatabaseSyncService {
return result; return result;
} }
/**
* 获取某个数据库下表列表
* @param ip mysql ip
* @param port mysql port
* @param username mysql 用户名
* @param password mysql 密码
* @param dbName 数据库名
* @return
*/
@Override @Override
public List<Object> getTableListByDb(String ip, String port, String username, String password, String dbName) { public List<Object> getTableListByDb(String ip, String port, String username, String password, String dbName) {
String driver = "com.mysql.jdbc.Driver"; String driver = "com.mysql.jdbc.Driver";
......
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