调整定时备份相关

This commit is contained in:
chenxudong 2025-03-18 10:58:52 +08:00
parent 9ac1b9fdf5
commit 19ed3f1b1b
2 changed files with 58 additions and 51 deletions

View File

@ -2,8 +2,10 @@ package com.electromagnetic.industry.software.manage;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication @SpringBootApplication
@EnableScheduling
public class Application { public class Application {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(Application.class, args); SpringApplication.run(Application.class, args);

View File

@ -22,6 +22,7 @@ import com.electromagnetic.industry.software.manage.pojo.models.FileBackupLog;
import com.electromagnetic.industry.software.manage.pojo.models.UserAccessLog; import com.electromagnetic.industry.software.manage.pojo.models.UserAccessLog;
import com.electromagnetic.industry.software.manage.service.FileSystemService; import com.electromagnetic.industry.software.manage.service.FileSystemService;
import com.electromagnetic.industry.software.manage.service.serviceimpl.CommonService; import com.electromagnetic.industry.software.manage.service.serviceimpl.CommonService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -33,6 +34,7 @@ import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Component @Component
@Slf4j
public class BackupTask { public class BackupTask {
@Resource @Resource
@ -50,7 +52,7 @@ public class BackupTask {
@Resource @Resource
private BackupHandler backupHandler; private BackupHandler backupHandler;
@Scheduled(cron = "0 0 1 * * ?") @Scheduled(cron = "0 0 * * * ?")
public void backup() { public void backup() {
// 首先查看备份失败的文件 // 首先查看备份失败的文件
@ -158,59 +160,62 @@ public class BackupTask {
@Scheduled(cron = "0 0 * * * ?") @Scheduled(cron = "0 0 * * * ?")
public void backupSql() { public void backupSql() {
String sqlDirs = elePropertyConfig.getSqlDirs(); try {
File[] files = new File(sqlDirs).listFiles((file, name) -> name.endsWith(".sql")); String sqlDirs = elePropertyConfig.getSqlDirs();
File maxModifyTimeFile = null; File[] files = new File(sqlDirs).listFiles((file, name) -> name.endsWith(".sql"));
long tmp = 0; File maxModifyTimeFile = null;
if (ArrayUtil.isEmpty(files)) { long tmp = 0;
return; if (ArrayUtil.isEmpty(files)) {
} return;
for (File file : files) {
if (file.lastModified() > tmp) {
tmp = file.lastModified();
maxModifyTimeFile = file;
} }
} for (File file : files) {
if (file.lastModified() > tmp) {
if (maxModifyTimeFile == null) { tmp = file.lastModified();
return; maxModifyTimeFile = file;
} }
String fileName = maxModifyTimeFile.getName(); }
List<FileBackupLog> fileBackupLogs = fileBackupLogMapper.selectList(Wrappers.<FileBackupLog>lambdaQuery() if (maxModifyTimeFile == null) {
.eq(FileBackupLog::getFileName, fileName) return;
.eq(FileBackupLog::getSource, FileBackupSource.SQL.code)); }
List<FileBackupLog> successBacks = fileBackupLogs.stream().filter(FileBackupLog::isBackupSuccess).collect(Collectors.toList()); String fileName = maxModifyTimeFile.getName();
if (CollUtil.isNotEmpty(successBacks)) { List<FileBackupLog> fileBackupLogs = fileBackupLogMapper.selectList(Wrappers.<FileBackupLog>lambdaQuery()
return;
}
long startTime = System.currentTimeMillis();
BackupFileResLog resLog = backupHandler.backupSql(maxModifyTimeFile.getAbsolutePath());
long endTime = System.currentTimeMillis();
List<FileBackupLog> failBacks = fileBackupLogs.stream().filter(FileBackupLog::isBackupSuccess).collect(Collectors.toList());
if (CollUtil.isEmpty(failBacks)) {
FileBackupLog backupLog = new FileBackupLog()
.setId(IdWorker.getSnowFlakeIdString())
.setFileId(Base64.encode(fileName))
.setFileCode(Base64.encode(fileName))
.setBackupSuccess(resLog.getBackupSuccess())
.setCreateTime(new Date())
.setStartTime(startTime)
.setEndTime(endTime)
.setDuration(endTime - startTime)
.setFailInfoDetail(resLog.getFailInfoDetail())
.setFileTime(FileUtil.lastModifiedTime(maxModifyTimeFile).getTime())
.setFileName(fileName)
.setFileCreateTime(FileUtil.lastModifiedTime(maxModifyTimeFile))
.setSource(FileBackupSource.SQL.code);
fileBackupLogMapper.insert(backupLog);
} else {
fileBackupLogMapper.update(new FileBackupLog(), Wrappers.<FileBackupLog>lambdaUpdate()
.eq(FileBackupLog::getSource, FileBackupSource.SQL.code)
.eq(FileBackupLog::getFileName, fileName) .eq(FileBackupLog::getFileName, fileName)
.set(FileBackupLog::getFailInfoDetail, resLog.getFailInfoDetail()) .eq(FileBackupLog::getSource, FileBackupSource.SQL.code));
.set(FileBackupLog::isBackupSuccess, resLog.getBackupSuccess())); List<FileBackupLog> successBacks = fileBackupLogs.stream().filter(FileBackupLog::isBackupSuccess).collect(Collectors.toList());
} if (CollUtil.isNotEmpty(successBacks)) {
return;
}
long startTime = System.currentTimeMillis();
BackupFileResLog resLog = backupHandler.backupSql(maxModifyTimeFile.getAbsolutePath());
long endTime = System.currentTimeMillis();
List<FileBackupLog> failBacks = fileBackupLogs.stream().filter(FileBackupLog::isBackupSuccess).collect(Collectors.toList());
if (CollUtil.isEmpty(failBacks)) {
FileBackupLog backupLog = new FileBackupLog()
.setId(IdWorker.getSnowFlakeIdString())
.setFileId(Base64.encode(fileName))
.setFileCode(Base64.encode(fileName))
.setBackupSuccess(resLog.getBackupSuccess())
.setCreateTime(new Date())
.setStartTime(startTime)
.setEndTime(endTime)
.setDuration(endTime - startTime)
.setFailInfoDetail(resLog.getFailInfoDetail())
.setFileTime(FileUtil.lastModifiedTime(maxModifyTimeFile).getTime())
.setFileName(fileName)
.setFileCreateTime(FileUtil.lastModifiedTime(maxModifyTimeFile))
.setSource(FileBackupSource.SQL.code);
fileBackupLogMapper.insert(backupLog);
} else {
fileBackupLogMapper.update(new FileBackupLog(), Wrappers.<FileBackupLog>lambdaUpdate()
.eq(FileBackupLog::getSource, FileBackupSource.SQL.code)
.eq(FileBackupLog::getFileName, fileName)
.set(FileBackupLog::getFailInfoDetail, resLog.getFailInfoDetail())
.set(FileBackupLog::isBackupSuccess, resLog.getBackupSuccess()));
}
} catch (Exception e) {
log.error("备份SQL文件异常原因 {}", e.getMessage(), e);
}
} }
} }