有这样一个业务需求,需要将数据归档的表每月定时备份,并且删除之前表中的数据,话不多说,直接上代码!

注意:这种方法适合数据量小,业务要求不高的场景!

项目采用SpringBoot  + MyBatis  + MySql实现。

以下是详细的代码步骤说明:

第一步:在springboot下新建task定时任务类,并且定义方法。

package com.nb.nbbl.utils.task;

import com.nb.nbbl.mapper.TaskMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;

@Component
@Slf4j
public class Task {
private final static String ip="127.0.0.1";
private final static int port= 3306;
private final static String user="root";
private final static String password="root";
private final static String databasenameame ="nbbl.2#";

@Autowired
private TaskMapper taskMapper;

@Scheduled(cron = "0 55 23 1 * ?") // 每月1号的23点59分执行
// @Scheduled(cron = "*/10 * * * * ?")
public void backMysql() throws IOException, InterruptedException {
log.info("备份数据库");
String backDate = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date());
//判断是windows系统还是linux系统
String os = System.getProperty("os.name");
if(os.toLowerCase().startsWith("win")) {
System.out.println(os + "执行备份");
dataBaseDump(ip, port, user, password, backDate);
}
}
public void dataBaseDump(String ip,int port,String user,String passWord,String backDate) throws IOException, InterruptedException {
File file = new File("D:\\MysqlBackFile");
if(!file.exists()){
file.mkdir();
}
// 注意这句命令一定要加上\\很容易出错
String command =" D:\\mysqldump\\mysqldump -h" +ip+ " -P" +port+ " -u" +user+ " -p" +passWord+ " " +databasenameame+ ">" +file+"\\"+backDate+".sql";
System.out.println(command);
StringBuilder msg = new StringBuilder();
BufferedReader bufferedReader = null;
Process proc = null;
//命令之间不能有空格
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", command);
// pb.directory(new File(dir));
try {
proc = pb.start();
System.out.println( proc.getOutputStream());

bufferedReader = new BufferedReader(new InputStreamReader(proc.getErrorStream(), "gbk"));
String line;
while ((line = bufferedReader.readLine()) != null) {
msg.append(line);
}
System.out.println(msg);
proc.waitFor();
if( proc.waitFor() ==0){
System.out.println("数据备份成功");
//数据备份成功后,执行删除操作,删除7天以前的数据
taskMapper.deleteData2();
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception ex) {
}
}
if(proc!=null){
proc.destroy();
}
}

}
}
第二步:定义删除数据接口
package com.nb.nbbl.mapper;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface TaskMapper {

void deleteData2();

}
第三步:编写task.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nb.nbbl.mapper.TaskMapper">

<!-- <insert id="insert" parameterType="com.nb.nbbl.entity.DeviceTable">-->
<!-- insert into device_table(device_code,age,birthday,status) values(#{name},#{age},#{birthday},#{status})-->
<!-- </insert>-->
<delete id="deleteData2" >
{call deleteData()}
</delete>
</mapper>

第四步:编写存储过程

CREATE DEFINER=`root`@`%` PROCEDURE `deleteData`()
BEGIN
#Routine body goes here...
delete from bar_control where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from btm where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from cavitytemp where DATE_SUB(CURDATE(), INTERVAL 7 DAY) >date(systime);
delete from device where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from heater_area_control where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from heater_whole_control where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from heater_inn_out_control where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from pressure where DATE_SUB(CURDATE(), INTERVAL 7 DAY) >date(systime);
delete from product_type where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from robot_record where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from safety_bolt_record where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);
delete from warnning_record where DATE_SUB(CURDATE(), INTERVAL 1 DAY) >=date(systime);

END

第五步:查看结果

至此,简单的数据备份这个功能点已经实现了!

windows系统下使用java语言,在mysql数据库中做定时数据备份、删除的更多相关文章

  1. Java程序向MySql数据库中插入的中文数据变成了问号

    找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...

  2. Linux系统下 解决Qt5无法连接MySQL数据库的方法

    Linux平台下解决Qt5连接mysql数据库的问题:输入sudo apt-get install libqt5sql5-mysql解决,这种方法只能解决Qt是用sudo apt-get instal ...

  3. JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中

    MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 程序从 MySQL 数据库中读取数据,并 ...

  4. MySQL_(Java)使用JDBC向数据库中修改(update)数据

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...

  5. MySQL_(Java)使用JDBC向数据库中插入(insert)数据

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...

  6. C#实现MySQL数据库中的blob数据存储

    在MySQL数据库中,有一种blob数据类型,用来存储文件.C#编程语言操作MySQL数据库需要使用MySQL官方组件MySQL.Data.dll. Mysql.Data.dll(6.9.6)组件下载 ...

  7. 64位Windows系统下32位应用程序连接MySql

    1.首先得安装“Connector/ODBC”,就是Mysql的ODBC驱动,这个是与应用程序相关的,而不是与操作系统相关的,也就是说,不管你的系统是x64还是x86,只要你的应用程序是x86的那么, ...

  8. 通过java代码往mysql数据库中写入日期相关数据少13个小时

    通过show variables like '%time_zone%'; 查看时区: CST 时区 名为 CST 的时区是一个很混乱的时区,有四种含义: 美国中部时间 Central Standard ...

  9. JDBC Java 程序从 MySQL 数据库中读取数据,并封装到 Javabean 对象中

    MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 连接 MySQL 数据库 用于测试的 M ...

  10. Java—JDBC向mysql数据库中给某个表添加数据时,会遇到的问题,如下

    解析(jar包该放在那里,以及其它的操作): 把jar包(驱动)添加到自己的项目中,最好新建一个文件夹,再把jar包(驱动包)添加到这个所新建的文件中 1.先建好自己的项目,再新建一个文件夹,如下: ...

随机推荐

  1. ABAP学习(34):cl_gui_alv_grid实现Table Maintain

    实现Table Maintain 通过类CL_GUI_ALV_GRID,实现Table Maintain功能. 实现效果: 1.创建Program; 2.创建空Screen 100; 3.创建GUI ...

  2. Feign熔断

    在Feign中使用 @EnableFeignClients中已经默认打开了断路器功能,所以这里的启动类上不需要再加@EnableCircuitBreaker注解 只需要在@FeignClient中为f ...

  3. 在安装SDK8.1和Visual Studio 2017时,提示“已停止工作”

    解决办法:在微软官网下载 .net framework 的最新的开发包(Build apps - Dev Pack),重新安装后问题得到解决. https://dotnet.microsoft.com ...

  4. [JSOI2014]宅男计划

    Description: 外卖店一共有N种食物,分别有1到N编号.第i种食物有固定的价钱Pi和保质期Si.第i种食物会在Si天后过期.JYY是不会吃过期食物的. 比如JYY如果今天点了一份保质期为1天 ...

  5. C语言||一作业03

    1.作业头 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-3/ 这个作业目标在哪 https://edu.cnblogs.com/cam ...

  6. FFT简单概述

    概念 快速傅里叶变换 (fast Fourier transform), 即利用计算机计算离散傅里叶变换(DFT)的高效.快速计算方法的统称,简称FFT.快速傅里叶变换是1965年由J.W.库利和T. ...

  7. CMD输出文本文件内容的type指令(替代Linux的cat指令)

    :: 本脚本的所有指令本身不输出到屏幕 @echo off :: 打印文本文件内容并匹配关键字,结果不输出到屏幕 type result.txt | find "error" &g ...

  8. core程序实现文件下载

    已知本地文件名,返回给前台流 string filepath = path +"/" + filename +".txt"; if(System.IO.File ...

  9. antd EditableProTable 组件的简单用法

    首先,antd EditableProTable 组件是在 table组件的基础上又封装了一层,可以实现行更新,删除,增加.只需动动手指,简单配置一下即可. 先下载 EditableProTable ...

  10. 面向对象2(Java)

    封装 基本介绍 该露的露,该藏的藏,我们的程序设计要追求"高内聚,低耦合": 高内聚:类的内部数据操作细节自己完成,不允许外部干涉 低耦合:仅暴露少量的方法给外部使用 封装(数据的 ...