summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nz-admin/src/main/java/com/nis/modules/sys/controller/SysBackupController.java13
-rw-r--r--nz-admin/src/main/java/com/nis/modules/sys/service/SysBackupService.java4
-rw-r--r--nz-admin/src/main/java/com/nis/modules/sys/service/impl/SysBackupServiceImpl.java37
-rw-r--r--nz-admin/src/main/resources/db/R__AZ_sys_i18n.sql6
-rw-r--r--nz-common/src/main/java/com/nis/common/utils/RCode.java2
5 files changed, 45 insertions, 17 deletions
diff --git a/nz-admin/src/main/java/com/nis/modules/sys/controller/SysBackupController.java b/nz-admin/src/main/java/com/nis/modules/sys/controller/SysBackupController.java
index b7d1f2a7..ad9fcb20 100644
--- a/nz-admin/src/main/java/com/nis/modules/sys/controller/SysBackupController.java
+++ b/nz-admin/src/main/java/com/nis/modules/sys/controller/SysBackupController.java
@@ -1,5 +1,6 @@
package com.nis.modules.sys.controller;
+import cn.hutool.log.Log;
import com.nis.common.exception.NZException;
import com.nis.common.smartvalidate.ValidateUtils;
import com.nis.common.utils.R;
@@ -20,6 +21,8 @@ import java.util.Map;
@RequestMapping("/sys/backup")
public class SysBackupController {
+ Log log = Log.get();
+
@Autowired
private SysBackupService sysBackupService;
@@ -48,8 +51,14 @@ public class SysBackupController {
}
@PostMapping
- public void backupData() {
- sysBackupService.backupData();
+ public R backupData() {
+ try {
+ sysBackupService.backupData();
+ } catch (Exception e) {
+ log.error("data backup error", e);
+ throw new NZException(RCode.SYS_BACKUP_ERROR);
+ }
+ return R.ok();
}
diff --git a/nz-admin/src/main/java/com/nis/modules/sys/service/SysBackupService.java b/nz-admin/src/main/java/com/nis/modules/sys/service/SysBackupService.java
index 427f3274..d0582990 100644
--- a/nz-admin/src/main/java/com/nis/modules/sys/service/SysBackupService.java
+++ b/nz-admin/src/main/java/com/nis/modules/sys/service/SysBackupService.java
@@ -10,8 +10,8 @@ public interface SysBackupService {
void save(Map<String, Object> params);
List<Object> queryBackupList();
-
- void backupData();
+
+ void backupData() throws Exception;
void removeBackFileByFilename(String filename);
diff --git a/nz-admin/src/main/java/com/nis/modules/sys/service/impl/SysBackupServiceImpl.java b/nz-admin/src/main/java/com/nis/modules/sys/service/impl/SysBackupServiceImpl.java
index f43781aa..4b8c022a 100644
--- a/nz-admin/src/main/java/com/nis/modules/sys/service/impl/SysBackupServiceImpl.java
+++ b/nz-admin/src/main/java/com/nis/modules/sys/service/impl/SysBackupServiceImpl.java
@@ -3,6 +3,7 @@ package com.nis.modules.sys.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IORuntimeException;
+import cn.hutool.core.io.IoUtil;
import cn.hutool.log.Log;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@@ -12,6 +13,7 @@ import com.nis.common.utils.*;
import com.nis.modules.sys.dao.SysConfigDao;
import com.nis.modules.sys.entity.SysConfigEntity;
import com.nis.modules.sys.service.SysBackupService;
+import org.mariadb.jdbc.MariaDbBlob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -20,6 +22,7 @@ import javax.sql.DataSource;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.sql.*;
import java.util.Date;
import java.util.*;
@@ -90,7 +93,8 @@ public class SysBackupServiceImpl implements SysBackupService {
return result;
}
- public void backupData() {
+ @Override
+ public void backupData() throws Exception {
String sqlFilename = null;
Connection conn = null;
Statement stmtInfo = null, stmtData = null;
@@ -187,14 +191,7 @@ public class SysBackupServiceImpl implements SysBackupService {
writer.flush();
writer.close();
}
-
- } catch (Exception e) {
- e.printStackTrace();
- log.error("nezha data backup error", e);
- if(StringUtils.isNotEmpty(sqlFilename)) {
- FileUtil.del(sqlFilename);
- }
- } finally {
+ } finally {
Tool.IoUtil.close(stmtData);
Tool.IoUtil.close(rsData);
Tool.IoUtil.close(stmtInfo);
@@ -307,7 +304,15 @@ public class SysBackupServiceImpl implements SysBackupService {
writer.newLine();
stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
- stmt.setFetchSize(Integer.MIN_VALUE);
+ /**
+ * If the fetch size specified is zero, the JDBC driver ignores the value and is free to make its own best guess as to what the fetch size should be.
+ * The default value is set by the Statement object that created the result set.
+ * The fetch size may be changed at any time.
+ * @see #setFetchSize
+ * @link https://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html#setFetchSize-int-
+ */
+ // stmt.setFetchSize(Integer.MIN_VALUE);
+ stmt.setFetchSize(0);
stmt.setFetchDirection(ResultSet.FETCH_REVERSE);
Integer start = 0;
@@ -337,8 +342,16 @@ public class SysBackupServiceImpl implements SysBackupService {
writer.write(',');
}
colValue = rs.getObject(j + 1);
- if(null != colValue) {
- writer.write(String.format("'%s'", this.escapeString(colValue.toString())));
+ if (null != colValue) {
+ // MariaDbBlob 单独处理,解决 bolo 类型直接 toString 造成结果有误问题
+ if (colValue instanceof MariaDbBlob) {
+ InputStream binaryStream = ((MariaDbBlob) colValue).getBinaryStream();
+ // 使用 0x 标识十六进制字符串,参照 ResultSet API ,binaryStream 转 十六进制 大写 字符串
+ String blobHexStr = Tool.StrUtil.concat(true, "0x", Tool.HexUtil.encodeHexStr(IoUtil.readBytes(binaryStream), false));
+ writer.write(blobHexStr);
+ } else {
+ writer.write(String.format("'%s'", escapeString(colValue.toString())));
+ }
} else {
writer.write("NULL");
}
diff --git a/nz-admin/src/main/resources/db/R__AZ_sys_i18n.sql b/nz-admin/src/main/resources/db/R__AZ_sys_i18n.sql
index ff9b3b0a..896be0b1 100644
--- a/nz-admin/src/main/resources/db/R__AZ_sys_i18n.sql
+++ b/nz-admin/src/main/resources/db/R__AZ_sys_i18n.sql
@@ -5510,5 +5510,11 @@ INSERT INTO `sys_i18n` VALUES (6081, 'ping.trance', 'en', 'ping.trance', 'Trance
INSERT INTO `sys_i18n` VALUES (6082, 'ping.trance', 'zh', 'ping.trance', 'Trance', '', '2022-05-18 02:45:00', 1);
INSERT INTO `sys_i18n` VALUES (6083, 'overall.snapshoot', 'en', 'overall.snapshoot', 'Snapshoot', '', '2022-05-27 01:35:01', 1);
INSERT INTO `sys_i18n` VALUES (6084, 'overall.snapshoot', 'zh', 'overall.snapshoot', '快照', '', '2022-05-27 01:35:11', 1);
+INSERT INTO `sys_i18n` VALUES (6085, 'tip.addFavorites', 'en', 'tip.addFavorites', 'Add to Favorites', '', '2022-05-27 02:28:36', 1);
+INSERT INTO `sys_i18n` VALUES (6086, 'tip.addFavorites', 'zh', 'tip.addFavorites', '添加到收藏夹', '', '2022-05-27 02:28:59', 1);
+INSERT INTO `sys_i18n` VALUES (6087, 'explore.graph', 'en', 'explore.graph', 'Graph', '', '2022-05-30 01:52:47', 1);
+INSERT INTO `sys_i18n` VALUES (6088, 'explore.graph', 'zh', 'explore.graph', '图表', '', '2022-05-30 01:53:42', 1);
+INSERT INTO `sys_i18n` VALUES (6089, '609002', 'en', 'SYS_BACKUP_ERROR', 'System data backup is abnormal', '', '2022-05-31 03:44:42', 1);
+INSERT INTO `sys_i18n` VALUES (6090, '609002', 'zh', 'SYS_BACKUP_ERROR', '系统数据备份异常', '', '2022-05-31 03:45:04', 1);
SET FOREIGN_KEY_CHECKS = 1;
diff --git a/nz-common/src/main/java/com/nis/common/utils/RCode.java b/nz-common/src/main/java/com/nis/common/utils/RCode.java
index b87cc5b6..d59133ba 100644
--- a/nz-common/src/main/java/com/nis/common/utils/RCode.java
+++ b/nz-common/src/main/java/com/nis/common/utils/RCode.java
@@ -830,7 +830,7 @@ public enum RCode {
*/
SYS_BACKUP_FILENAME_ISNULL(601000, "System backup file name cannot be empty"),
SYS_BACKUP_FILENAME_NOTEXIST(601001, "System backup file does not exist"),
-
+ SYS_BACKUP_ERROR(609002, "System data backup is abnormal"),
/**
* webshell相关
*/