后端 Springboot
Controller
@RestController
@RequestMapping("api")
public class BackupController {
@Autowired
private BackupService backupService;
// 获取备份记录
@GetMapping(value = "/backup/backup")
public ResponseEntity getBackup(){
return new ResponseEntity(backupService.queryBackup(),HttpStatus.OK);
}
// 备份
@PostMapping(value = "/backup/backup")
public ResponseEntity backup(@Validated @RequestBody String name){
backupService.backup(name);
return new ResponseEntity(HttpStatus.CREATED);
}
// 还原
@PutMapping(value = "/backup/restore")
public ResponseEntity restore(@Validated @RequestBody String name){
backupService.restore(name);
return new ResponseEntity(HttpStatus.OK);
}
// 删除备份记录
@DeleteMapping(value = "/backup/del")
public ResponseEntity delBackup(@Validated @RequestBody String name){
backupService.delBackup(name);
return new ResponseEntity(HttpStatus.OK);
}
}
BackupService
public interface BackupService {
List<Map<String, String>> queryBackup();
void backup(String name);
void restore(String name);
void delBackup(String name);
}
BackupServiceImpl
功能实现代码如下,BackupConstants
为常量接口,此外还需要FileUtils
、MySqlBackupRestoreUtils
用于文件操作(删除备份的sql文件)、数据库sql语句执行(备份和还原)
public class BackupServiceImpl implements BackupService {
@Override
public List<Map<String, String>> queryBackup(){
List<Map<String, String>> backupRecords = new ArrayList<>();
File restoreFolderFile = new File(BackupConstants.RESTORE_FOLDER);
if(restoreFolderFile.exists()) {
for(File file:restoreFolderFile.listFiles()) {
Map<String, String> backup = new HashMap<>();
backup.put("title", file.getName());
backupRecords.add(backup);
}
}
// 按时间戳排序,新备份在前面
backupRecords.sort((o1, o2) -> o2.get("title").compareTo(o1.get("title")));
return backupRecords;
}
@Override
public void backup(String name){
String host = BackupConstants.HOST;
String userName = BackupConstants.USER_NAME;
String password = BackupConstants.PASSWORD;
String database = BackupConstants.DATABASE;
String backupFolderPath = BackupConstants.BACKUP_FOLDER + name + File.separator;
String fileName = name