浏览代码

feat: 更新发生异常时检查是否存在备份,如果存在备份则恢复

weijianghai 1 年之前
父节点
当前提交
1c42b44c45
共有 3 个文件被更改,包括 23 次插入35 次删除
  1. 9 14
      scripts/import.sh
  2. 1 1
      src/main/java/com/nokia/common/psql/PsqlUtil.java
  3. 13 20
      src/main/java/com/nokia/task/SyncTask.java

+ 9 - 14
scripts/import.sh

@@ -1,15 +1,10 @@
-#!/bin/expect
+#!/bin/bash
 
 
-set timeout 300
-set host [lindex $argv 0]
-set port [lindex $argv 1]
-set username [lindex $argv 2]
-set password [lindex $argv 3]
-set dbname [lindex $argv 4]
-set table [lindex $argv 5]
-set filename [lindex $argv 6]
-spawn psql -h ${host} -p ${port} -U ${username} -d ${dbname} -c "\\copy ${table} from ${filename} with csv"
-expect "Password" {
-  send "${password}\r"
-}
-expect eof
+export PGPASSWORD=$4
+host=$1
+port=$2
+username=$3
+dbname=$5
+table=$6
+filename=$7
+psql -h ${host} -p ${port} -U ${username} -d ${dbname} -c "\\copy ${table} from ${filename} with csv;"

+ 1 - 1
src/main/java/com/nokia/common/psql/PsqlUtil.java

@@ -37,7 +37,7 @@ public class PsqlUtil {
     public static void copyCsv(String script, String dbHost, Integer dbPort, String dbUsername, String dbPassword,
     public static void copyCsv(String script, String dbHost, Integer dbPort, String dbUsername, String dbPassword,
                                String dbName, String dbTable, String csv, Long minInsertCount)
                                String dbName, String dbTable, String csv, Long minInsertCount)
             throws IOException, InterruptedException {
             throws IOException, InterruptedException {
-        String command = "expect -f"
+        String command = "sh"
                 + " " + script
                 + " " + script
                 + " " + dbHost
                 + " " + dbHost
                 + " " + dbPort
                 + " " + dbPort

+ 13 - 20
src/main/java/com/nokia/task/SyncTask.java

@@ -3,8 +3,6 @@ package com.nokia.task;
 import com.jcraft.jsch.JSchException;
 import com.jcraft.jsch.JSchException;
 import com.jcraft.jsch.SftpException;
 import com.jcraft.jsch.SftpException;
 import com.nokia.common.exception.MyRuntimeException;
 import com.nokia.common.exception.MyRuntimeException;
-import com.nokia.common.gpload.GploadUtil;
-import com.nokia.common.gpload.entity.GploadResult;
 import com.nokia.common.psql.PsqlUtil;
 import com.nokia.common.psql.PsqlUtil;
 import com.nokia.common.ssh.SSHUtil;
 import com.nokia.common.ssh.SSHUtil;
 import com.nokia.config.TaskConfig;
 import com.nokia.config.TaskConfig;
@@ -268,26 +266,21 @@ public class SyncTask {
      * 回滚
      * 回滚
      */
      */
     public void rollback() {
     public void rollback() {
-        String sql = "drop table if exists sqmdb_rpt.acl_top_user";
+        String sql = "select exists (select from pg_tables where schemaname = 'sqmdb_rpt' and tablename = 'acl_top_user_bak')";
+        Boolean backupExists = jdbcTemplate.queryForObject(sql, Boolean.class);
         log.warn(sql);
         log.warn(sql);
         XxlJobHelper.log(sql);
         XxlJobHelper.log(sql);
-        jdbcTemplate.execute(sql);
-        sql = "alter table sqmdb_rpt.acl_top_user_bak rename to acl_top_user";
-        log.warn(sql);
-        XxlJobHelper.log(sql);
-        jdbcTemplate.execute(sql);
-    }
-
-    public void gpload() throws IOException {
-        String gploadCommand = "sh gpload/gpload.sh";
-        GploadResult gpload = GploadUtil.gpload(gploadCommand);
-        if (Boolean.TRUE.equals(gpload.getTaskStatus())) {
-            log.info("gpload完成: {}", gpload);
-            XxlJobHelper.log("gpload完成: {}", gpload);
-            // 删除文件
-            Files.deleteIfExists(Paths.get(taskConfig.getDistinctFilename()));
-        } else {
-            throw new MyRuntimeException("gpload失败: " + gpload.getMessage());
+        if (Boolean.TRUE.equals(backupExists)) {
+            sql = "truncate table sqmdb_rpt.acl_top_user";
+            log.warn(sql);
+            XxlJobHelper.log(sql);
+            jdbcTemplate.execute(sql);
+            sql = "insert into sqmdb_rpt.acl_top_user\n"
+                    + "(login_name, org_id, org_name, user_id, user_name, phone, employee_code, province_id, city_id, area_id)\n"
+                    + "select * from sqmdb_rpt.acl_top_user_bak";
+            log.warn(sql);
+            XxlJobHelper.log(sql);
+            jdbcTemplate.execute(sql);
         }
         }
     }
     }
 }
 }