java定时任务备份数据库
文章目录
- 前言
- 一、定时任务备份
- 二、分享两个windows运行项目脚本
- 总结
前言
数据库备份
程序中数据库备份可以有效避免因为意外,导致数据丢失,因此数据备份显得尤为重要。
一、定时任务备份
- 定时任务类,要在配置类或启动类开启 @EnableScheduling
@Data
@Sl4j
@Service
public class SqlBackupTask {
@Value("${app.sqldir}")
private String sqlDir;
@Value("${app.host}")
private String host;
@Value("${app.port}")
private String port;
@Value("${app.username}")
private String username;
@Value("${app.password}")
private String password;
@Value("${app.dbname}")
private String dbname;
/**
* 执行数据库备份
*/
// 每日0点执行
@Scheduled(cron = "0 0 0 * * ?")
public void windowsDump() throws Exception {
File file = new File(sqlDir);
if (!file.exists()) {
file.mkdir();
}
LocalDateTime now = LocalDateTime.now();
String sqlname = now.format(DateTimeFormatter.ofPattern("yyyy_MM_dd"));
String fileName = sqlDir + File.separator + sqlname + ".sql";
File datafile = new File(fileName);
if (datafile.exists()) {
log.info("文件{}已存在,请更换", datafile.getName());
return;
}
//拼接cmd命令 windows下 cmd Linux下 /bin/sh
Process exec = Runtime.getRuntime().exec("cmd /c mysqldump -h" + host + " -P" + port + " -u " + username + " -p" + password + " " + dbname + " > " + datafile);
if (exec.waitFor() == 0) {
log.info("数据库备份成功");
delHistory(now);
} else {
log.error("数据库备份失败");
}
}
/**
* 删除当前时间五天前的备份
*/
// 每日1点执行
@Scheduled(cron = "0 0 1 * * ?")
private void delleteHistory(LocalDateTime now) {
try {
for (int i = 5; i < 10; i++) {
String sqlname = now.plusDays(-i).format(DateTimeFormatter.ofPattern("yyyy_MM_dd"));
String fileName = sqlDir + File.separator + sqlname + ".sql";
File dataFile = new File(fileName);
if (dataFile.exists()) {
dataFile.delete();
}
}
} catch (Exception e) {
log.error("删除数据库备份文件失败", e);
}
}
}
- yml 配置
app:
sqldir: D:/dxb/sqlbackup/
host: 10.0.15.36
port: 3306
username: root
password: root
dbname: dx_bao
二、分享两个windows运行项目脚本
- start.bat
可以做到后台运行且不显示cmd窗口
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin
start /b java -jar ruoyi-admin.jar --spring.config.location=./application.yml > nul 2>&1 &
- stop.bat
主要是根据端口停止
@echo off
setlocal enabledelayedexpansion
for /f "eol=* tokens=*" %%i in ('netstat -an -o ^| findstr "8888"') do (
set a=%%i
set a=!a:~69,10!
echo !a!
taskkill /F /PID !a!
)
pause>nul
总结
这样就无须借助其他工具,只要程序运行,就能随时完整备份数据库了。