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