diff --git a/src/main/java/com/mini/capi/job/taskDbSync.java b/src/main/java/com/mini/capi/job/taskDbSync.java index 7f1da04..b826cee 100644 --- a/src/main/java/com/mini/capi/job/taskDbSync.java +++ b/src/main/java/com/mini/capi/job/taskDbSync.java @@ -46,40 +46,67 @@ public class taskDbSync { private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd"); private static final String dsValue = LocalDate.now().format(DATE_FORMATTER); + /** + * 运行全部任务 + */ @GetMapping("/getTaskSyncDbInfo") - public ApiResult jobSyncTask(String token) { - if (vToken.isValidToken(token)) { - List syncTasks = syncTaskService.list(); + public ApiResult jobSyncAllTask(String token) { + if (!vToken.isValidToken(token)) { + return ApiResult.error(401, "无效的访问令牌"); + } + List syncTasks = syncTaskService.list(); + // 记录是否有任务失败(仅用于后台日志,不影响接口返回) + List errorMessages = new ArrayList<>(); + for (SyncTask task : syncTasks) { + // 提交任务到线程池(异步执行,接口不等待) + execSyncTask(task, errorMessages); + } + // 接口立即返回,不等待任务执行完成 + return ApiResult.success(); + } + + + /** + * 运行单个任务 + */ + @GetMapping("/getTaskSyncDbByInfo") + public ApiResult jobSyncOneTask(String token, String taskId) { + if (!vToken.isValidToken(token)) { + return ApiResult.error(401, "无效的访问令牌"); + } + try { + SyncTask task = syncTaskService.getById(taskId); // 记录是否有任务失败(仅用于后台日志,不影响接口返回) List errorMessages = new ArrayList<>(); - for (SyncTask task : syncTasks) { - // 提交任务到线程池(异步执行,接口不等待) - hostExecutor.execute(() -> { - try { - // 1. 获取源/目标数据库配置 - DbConfig sourceDbConfig = dbConfigService.getById(task.getSourceDbId()); - DbConfig targetDbConfig = dbConfigService.getById(task.getTargetDbId()); - // 2. 创建对应数据库的JdbcTemplate - JdbcTemplate sourceJdbc = DataSourceConfig.createJdbcTemplate(sourceDbConfig); - JdbcTemplate targetJdbc = DataSourceConfig.createJdbcTemplate(targetDbConfig); - // 3. 执行表同步逻辑(异步执行) - syncTableData(task, sourceJdbc, targetJdbc); - } catch (Exception e) { - // 捕获任务执行异常,记录错误信息(仅后台打印,不阻塞接口) - String errorMsg = "任务 " + task.getTaskId() + " 同步失败: " + e.getMessage(); - System.err.println(errorMsg); - // 加锁保证线程安全(多线程操作同一List) - synchronized (errorMessages) { - errorMessages.add(errorMsg); - } - } - }); - System.out.println(errorMessages); - } - // 接口立即返回,不等待任务执行完成 + execSyncTask(task, errorMessages); return ApiResult.success(); + } catch (Exception e) { + return ApiResult.error(101, e.getMessage()); } - return ApiResult.error(); + } + + private void execSyncTask(SyncTask task, List errorMessages) { + hostExecutor.execute(() -> { + try { + // 1. 获取源/目标数据库配置 + DbConfig sourceDbConfig = dbConfigService.getById(task.getSourceDbId()); + DbConfig targetDbConfig = dbConfigService.getById(task.getTargetDbId()); + // 2. 创建对应数据库的JdbcTemplate + JdbcTemplate sourceJdbc = DataSourceConfig.createJdbcTemplate(sourceDbConfig); + JdbcTemplate targetJdbc = DataSourceConfig.createJdbcTemplate(targetDbConfig); + // 3. 执行表同步逻辑(异步执行) + syncTableData(task, sourceJdbc, targetJdbc); + } catch (Exception e) { + // 捕获任务执行异常,记录错误信息(仅后台打印,不阻塞接口) + String errorMsg = "任务 " + task.getTaskId() + " 同步失败: " + e.getMessage(); + System.err.println(errorMsg); + // 加锁保证线程安全(多线程操作同一List) + synchronized (errorMessages) { + errorMessages.add(errorMsg); + } + } + }); + System.out.println(errorMessages); } /**