当前位置:网站首页>项目实训11——对数据库的定时备份

项目实训11——对数据库的定时备份

2022-06-10 22:01:00 ScarlettWX

  上一篇博客中讲到如何对特定数据库进行备份,本篇博客来讨论如何对一些数据库进行定时备份。
  定时备份使用的方法和之前的方法一样,使用Runtime.getRuntime().exec(command)执行命令行语句,备份的sql文件存储在指定的路径的文件夹内。调用DBService即数据库服务对象可获得存储在系统数据库内的用户数据库,将其存储在List中。循环List.size()次数,根据List的index每次备份一个数据库。现在的问题是如何定时执行任务。实现方法为先开启一个线程再对一个数据库进行备份。使用cron存储定时的周期,以"0 30 9 * * ?"为例,第一位0表示0秒,第二位30表示30分钟,第三位9表示上午9时,其余位用其他符号代替表示每天的9:30。下面是定时的代码:

@Configuration //标记配置类,兼备Component的效果
@EnableScheduling //开启定时任务
public class SimpleScheduleConfig implements SchedulingConfigurer{
    

    @Autowired
    private DBService dbService;

    @SneakyThrows
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    
        List<DB> dbList=dbService.findDBList();
        Thread thread = new Thread(){
    
            @SneakyThrows
            @Override
            public void run() {
    
                super.run();
                int dbid;
                for(int i=0; i<dbList.size(); i++){
    
                    dbid=dbList.get(i).getId();
                    dbService.backupDB(dbid);

                }
            }
        };

        taskRegistrar.addTriggerTask(
                thread,
                triggerContext -> {
    
                    //执行周期每天9点30分
                    String cron = "0 30 9 * * ?";
                    //非空校验
                    if(StringUtils.isEmpty(cron)){
    
                        //TODO
                    }
                    //返回执行周期

                    return new CronTrigger(cron).nextExecutionTime(triggerContext);
                }
        );

    }
}


控制台运行结果:
控制台
文件夹中的显示:
文件夹
  之前sql文件的命名格式为数据库名+当前日期+.sql,如果备份周期非常频繁,一天之内多次备份,则会造成后备份的文件覆盖之前的文件,会影响数据。所以我改变了命名格式,现在为数据库名+当前日期+当前时间+.sql。命名代码如下:

        Date date = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dt=df.format(date);
        String datetime1=dt.replace(" ","_");
        String datetime2=datetime1.replace(":","-");
        // 备份文件名称
        String fileName = dbName+datetime2+ ".sql";

注意文件名中不能有空格和冒号,要使用其他字符替代,否则不会有文件生成。

原网站

版权声明
本文为[ScarlettWX]所创,转载请带上原文链接,感谢
https://blog.csdn.net/ScarlettWX/article/details/125128854