当前位置: 首页 > article >正文

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

总结

这样就无须借助其他工具,只要程序运行,就能随时完整备份数据库了。


http://www.kler.cn/a/519211.html

相关文章:

  • Go语言开发项目文件规范
  • 使用云服务器自建Zotero同步的WebDAV服务教程
  • Avalonia+ReactiveUI跨平台路由:打造丝滑UI交互的奇幻冒险
  • 全连接神经网络(前馈神经网络)
  • vim如何设置自动缩进
  • 【论文阅读】RAG-Reward: Optimizing RAG with Reward Modeling and RLHF
  • php-phar打包避坑指南2025
  • 电梯系统的UML文档10
  • Redis-缓存
  • unity导入图片素材注意点和AI寻路模块导入
  • vofa++使用方法
  • 信息收集 CTF 1 挑战通关指南
  • Java 大视界 -- Java 大数据中的隐私增强技术全景解析(64)
  • Kubernetes相关知识入门详解
  • [JavaScript] ES6及以后版本的新特性
  • QEMU 和 GDB 调试 Linux 内核
  • RedisTemplate优化指南
  • 前端Vue2项目使用md编辑器
  • 1.25寒假作业
  • IDEA社区版(免费版)创建spring boot项目
  • Linux--权限
  • Spring Boot应用中实现基于JWT的登录拦截器,以保证未登录用户无法访问指定的页面
  • 语言集成查询LINQ
  • YOLOv8改进,YOLOv8检测头融合DynamicHead,并添加小目标检测层(四头检测),适合目标检测、分割等,全网独发
  • 洛谷P1003
  • Flink (十二) :Table API SQL (一) 概览