From b3c04038def5b4c248db1441eaacf84bbf153aff Mon Sep 17 00:00:00 2001
From: 杜洪波 <1074825718@qq.com>
Date: 星期四, 05 六月 2025 16:59:05 +0800
Subject: [PATCH] 系统备份优化,输出文件改为UTF-8格式

---
 src/main/java/com/product/system/backup/service/SystemBackupService.java |  120 +++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 78 insertions(+), 42 deletions(-)

diff --git a/src/main/java/com/product/system/backup/service/SystemBackupService.java b/src/main/java/com/product/system/backup/service/SystemBackupService.java
index 5594f37..4acbe44 100644
--- a/src/main/java/com/product/system/backup/service/SystemBackupService.java
+++ b/src/main/java/com/product/system/backup/service/SystemBackupService.java
@@ -59,6 +59,7 @@
 	 * 	璋冪敤鍦扮偣锛氬畾鏃朵换鍔¢厤缃姛鑳�(bean)
 	 */
 	public void systemBackupInit(){
+		// 鍒濆鏃ュ織鏂囦欢
 		log = new BackupLogger();
 		// 鍦ㄦ棩蹇椾腑璁板綍鎿嶄綔绯荤粺淇℃伅锛屼究浜庤皟璇�
 		log.writeInfo("銆愮郴缁熷浠藉叆鍙c�戞搷浣滅郴缁�: " + System.getProperty("os.name"), BackupLogger.INFO_TYPE);
@@ -68,6 +69,7 @@
 		NUMBER_DATE = numberDateFormat.format(new Date());
 		log.writeInfo("銆愮郴缁熷浠藉叆鍙c�戠郴缁熸棩鏈燂細" + NUMBER_DATE, BackupLogger.INFO_TYPE);
 		log.writeInfo("銆愮郴缁熷浠藉叆鍙c�戠郴缁熸椂闂达細" + NUMBER_TIME, BackupLogger.INFO_TYPE);
+		// 杩涘叆澶囦唤杩涚▼
 		backupProcess();
 		log.closeLogger();
 	}
@@ -87,13 +89,12 @@
 		status = runExpDataBase();
 		if (!status)
 			return;
-		
 		// 绗笁姝ワ細鎵ц瀵规暟鎹簱鏂囦欢銆佸伐绋嬩唬鐮併�佷笂浼犳枃浠跺仛鍘嬬缉澶囦唤
 		status = zipDataBackup();
 		if (!status)
 			return;
 		// 绗洓姝ワ細涓婁紶鍘嬬缉澶囦唤鏂囦欢鍒癋TP
-		status = uploadBackupMachine();
+		status = sftpTransferService(true);
 //		uploadBackupMachine2();
 		if (!status)
 			return;
@@ -111,6 +112,9 @@
 	public boolean initSystemConfig() {
 		log.writeInfo("銆愬垵濮嬮厤缃枃浠躲�戝紑濮嬪垵濮嬬郴缁熼厤缃枃浠�..................", BackupLogger.INFO_TYPE);
 		try (InputStream  reader = getClass().getClassLoader().getResourceAsStream(CONFIG_FILE_PATH)) {
+			if (reader == null) {
+				log.writeInfo("銆愬垵濮嬮厤缃枃浠躲�戝垵濮嬬郴缁熼厤缃枃浠跺け璐ワ細" + CONFIG_FILE_PATH + "閰嶇疆鏂囦欢涓嶅瓨鍦�", BackupLogger.ERROR_TYPE);
+			}
 			// 璇诲彇澶囦唤閰嶇疆鏂囦欢
 			config = new Properties();
 			config.load(reader);
@@ -178,7 +182,7 @@
         try {
             Process process = processBuilder.start();
             // 璇诲彇mysqldump鐨勮緭鍑哄苟鍐欏叆鍒板浠芥枃浠�
-            try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+            try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8));
                  FileWriter writer = new FileWriter(backupFile)) {
                 
                 String line;
@@ -199,6 +203,10 @@
             int exitCode = process.waitFor();
             if (exitCode == 0) {
                 log.writeInfo("銆愬浠芥暟鎹簱銆戞暟鎹簱澶囦唤鎴愬姛锛�" + backupFile.getAbsolutePath(), BackupLogger.INFO_TYPE);
+//              if (!"127.0.0.1".equals(databaseHost)) {
+                	// 鑾峰彇鏁版嵁搴撳浠芥枃浠�
+//					return sftpTransferService(false);
+//				}
             } else {
                 log.writeInfo("銆愬浠芥暟鎹簱銆戞暟鎹簱澶囦唤澶辫触锛岄��鍑虹爜: " + exitCode, BackupLogger.ERROR_TYPE);
             }
@@ -270,54 +278,82 @@
 	}
 	
     /**
-	 * 	绗洓姝ワ細SFTP鍙戦�佷笂浼犲鐢ㄦ満
-	 */
-	public boolean uploadBackupMachine() {
-		log.writeInfo("銆愪笂浼犲浠芥枃浠躲�戝紑濮嬩笂浼犲浠芥枃浠�..................", BackupLogger.INFO_TYPE);
-        String localFile = config.getProperty("ZIPFILE_BACKUP"); // 鏈湴鏂囦欢璺緞
-        String remotePath = config.getProperty("UPLOAD_BACKUP_DIR") + NUMBER_TIME + ".zip"; // 杩滅▼鏂囦欢璺緞
-        int port = Integer.valueOf(config.getProperty("UPLOAD_SFTP_PORT")); //SSH绔彛
-        String host = config.getProperty("UPLOAD_SFTP_HOST"); // 澶囩敤鏈嶅姟鍣ㄧ殑IP鍦板潃
-        String user = config.getProperty("UPLOAD_SFTP_USER"); // 澶囩敤鏈嶅姟鍣ㄧ殑鐢ㄦ埛鍚�
-        String password = config.getProperty("UPLOAD_SFTP_PWD"); // 澶囩敤鏈嶅姟鍣ㄧ殑瀵嗙爜
-        log.writeInfo("銆愪笂浼犲浠芥枃浠躲�戜笂浼犲鐢ㄦ満鍦板潃锛�" + host, BackupLogger.INFO_TYPE);
-        log.writeInfo("銆愪笂浼犲浠芥枃浠躲�戜笂浼犲鐢ㄦ満绔彛锛�" + port, BackupLogger.INFO_TYPE);
-        log.writeInfo("銆愪笂浼犲浠芥枃浠躲�戜笂浼犲鐢ㄦ満鐩綍锛�" + remotePath, BackupLogger.INFO_TYPE);
-        if (StringUtils.isEmpty(host) || StringUtils.isEmpty(user) || StringUtils.isEmpty(password)) {
-        	log.writeInfo("銆愪笂浼犲浠芥枃浠躲�戜笂浼犲鐢ㄦ満鍦板潃SFTP淇℃伅鏈厤缃畬鏁达紝涓嶄簣涓婁紶", BackupLogger.INFO_TYPE);
+     * SFTP杩炴帴锛氶�氳繃SFTP灏嗗浠芥枃浠朵笂浼犲鐢ㄦ満  鎴�  浠巑ysql鏈嶅姟鍣ㄤ笂鑾峰彇澶囦唤鏂囦欢
+     * @param isUpload	 鏄惁涓婁紶
+     * @return
+     */
+	public boolean sftpTransferService(boolean isUpload) {
+        String sftpTitle = null;
+        String localFilePath = null;
+        String sftpFilePath = null;
+		if(isUpload) {
+			sftpTitle = "涓婁紶绯荤粺澶囦唤鏂囦欢";
+			localFilePath = config.getProperty("ZIPFILE_BACKUP"); // 鏈湴鏂囦欢璺緞
+			sftpFilePath = config.getProperty("UPLOAD_BACKUP_DIR") + NUMBER_TIME + ".zip"; // SFTP鏈嶅姟鏂囦欢璺緞
+		} else {
+//			sftpTitle = "鑾峰彇鏁版嵁搴撳浠芥枃浠�";
+//			localFilePath = config.getProperty("DATABASE_BACKUP"); // 鏈湴鏂囦欢璺緞
+//			sftpFilePath = config.getProperty("DATABASE_BACKUP"); // SFTP鏈嶅姟鏂囦欢璺緞
+		}
+		String host = config.getProperty("UPLOAD_SFTP_HOST"); // SFTP鏈嶅姟IP鍦板潃
+        String port = config.getProperty("UPLOAD_SFTP_PORT"); // SSH绔彛
+        String user = config.getProperty("UPLOAD_SFTP_USER"); // SFTP鏈嶅姟鐨勭敤鎴峰悕
+        String password = config.getProperty("UPLOAD_SFTP_PWD"); // SFTP鏈嶅姟鐨勫瘑鐮�
+		log.writeInfo(String.format("銆�%s銆戝紑濮�%s..................", sftpTitle, sftpTitle), BackupLogger.INFO_TYPE);
+        log.writeInfo(String.format("銆�%s銆慡FTP鏈嶅姟鍦板潃锛�", sftpTitle) + host, BackupLogger.INFO_TYPE);
+        log.writeInfo(String.format("銆�%s銆慡FTP鏈嶅姟绔彛锛�", sftpTitle) + port, BackupLogger.INFO_TYPE);
+        log.writeInfo(String.format("銆�%s銆慡FTP鏈嶅姟瀛樺偍鐩綍锛�", sftpTitle) + sftpFilePath, BackupLogger.INFO_TYPE);
+        log.writeInfo(String.format("銆�%s銆戝綋鍓嶆湇鍔″瓨鍌ㄧ洰褰曪細", sftpTitle) + localFilePath, BackupLogger.INFO_TYPE);
+        if (StringUtils.isEmpty(host) || StringUtils.isEmpty(port) || StringUtils.isEmpty(user) || StringUtils.isEmpty(password)) {
+        	log.writeInfo(String.format("銆�%s銆慡FTP淇℃伅鏈厤缃畬鏁达紝涓嶄簣杩炴帴浼犺緭鏂囦欢", sftpTitle), BackupLogger.INFO_TYPE);
 			return true;
 		}
         try {
-        	 JSch jsch = new JSch();
-             Session session = jsch.getSession(user, host, port);
-             session.setPassword(password);
-             session.setConfig("StrictHostKeyChecking", "no"); // 浠呴檺娴嬭瘯鐜
-             session.connect(5000); // 璁剧疆杩炴帴瓒呮椂鏃堕棿
+            JSch jsch = new JSch();
+            Session session = jsch.getSession(user, host, Integer.valueOf(port));
+            session.setPassword(password);
+            session.setConfig("StrictHostKeyChecking", "no"); // 浠呴檺娴嬭瘯鐜
+            session.connect(5000); // 璁剧疆杩炴帴瓒呮椂鏃堕棿
   
-             Channel channel = session.openChannel("sftp");
-             channel.connect(5000); // 璁剧疆閫氶亾瓒呮椂鏃堕棿
-             ChannelSftp sftpChannel = (ChannelSftp) channel;
+            Channel channel = session.openChannel("sftp");
+            channel.connect(5000); // 璁剧疆閫氶亾瓒呮椂鏃堕棿
+            ChannelSftp sftpChannel = (ChannelSftp) channel;
              
-             // 纭繚杩滅▼鐩綍瀛樺湪锛堝叧閿楠わ級
-             String remoteDir = remotePath.substring(0, remotePath.lastIndexOf('/'));
-             if (!remoteDir.startsWith("/")) {
-                 remoteDir = "/" + remoteDir;
-             }
-             // 鍒涘缓瀵瑰簲鐩綍鏂囦欢澶�
-             createRemoteDirectory(sftpChannel, remoteDir);
-             sftpChannel.put(localFile, remotePath, new SftpProgressMonitor() {
-                 public void init(int op, String src, String dest, long max) {
-                     log.writeInfo("銆愪笂浼犲浠芥枃浠躲�戝紑濮嬩紶杈�: " + src + " -> " + dest, BackupLogger.INFO_TYPE);
-                 }
-                 public boolean count(long count) { return true; }
-                 public void end() { log.writeInfo("銆愪笂浼犲浠芥枃浠躲�戜紶杈撳畬鎴�", BackupLogger.INFO_TYPE); }
-             });
+            // 纭繚鐩綍瀛樺湪锛堝叧閿楠わ級
+            String remoteDir = sftpFilePath.substring(0, sftpFilePath.lastIndexOf('/'));
+            if (!remoteDir.startsWith("/")) {
+                remoteDir = "/" + remoteDir;
+            }
+            if(isUpload) {
+            	// 鍒涘缓瀵瑰簲鐩綍鏂囦欢澶�
+                createRemoteDirectory(sftpChannel, remoteDir);
+                sftpChannel.put(localFilePath, sftpFilePath, new SftpProgressMonitor() {
+                    public void init(int op, String src, String dest, long max) {
+                        log.writeInfo("銆愪笂浼犵郴缁熷浠芥枃浠躲�戝紑濮嬩紶杈�: " + src + " -> " + dest, BackupLogger.INFO_TYPE);
+                    }
+                    public boolean count(long count) { return true; }
+                    public void end() { log.writeInfo("銆愪笂浼犵郴缁熷浠芥枃浠躲�戜紶杈撳畬鎴�", BackupLogger.INFO_TYPE); }
+                });
+            } else {
+            	// 鍒涘缓瀵瑰簲鐩綍鏂囦欢澶�
+                File fileDirectory = new File(remoteDir);
+                if (!fileDirectory.exists()) {
+                	fileDirectory.mkdirs();
+                }
+                sftpChannel.get(localFilePath, sftpFilePath, new SftpProgressMonitor() {
+                    public void init(int op, String src, String dest, long max) {
+                        log.writeInfo("銆愯幏鍙栨暟鎹簱澶囦唤鏂囦欢銆戝紑濮嬩紶杈�: " + src + " -> " + dest, BackupLogger.INFO_TYPE);
+                    }
+                    public boolean count(long count) { return true; }
+                    public void end() { log.writeInfo("銆愯幏鍙栨暟鎹簱澶囦唤鏂囦欢銆戜紶杈撳畬鎴�", BackupLogger.INFO_TYPE); }
+                });
+            }
             sftpChannel.exit();
             session.disconnect();
-            log.writeInfo("銆愪笂浼犲浠芥枃浠躲�戜笂浼犲浠芥枃浠舵垚鍔�", BackupLogger.INFO_TYPE);
+            log.writeInfo(String.format("銆�%s銆�%s鎴愬姛", sftpTitle, sftpTitle), BackupLogger.INFO_TYPE);
         } catch (JSchException | SftpException e) {
             e.printStackTrace();
-            log.writeInfo("銆愪笂浼犲浠芥枃浠躲�戜笂浼犲浠芥枃浠跺け璐ワ細" + e.getMessage(), BackupLogger.ERROR_TYPE);
+            log.writeInfo(String.format("銆�%s銆�%s澶辫触锛�", sftpTitle, sftpTitle) + e.getMessage(), BackupLogger.ERROR_TYPE);
             return false;
         }
         return true;

--
Gitblit v1.9.2