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

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

项目采用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. prometheus 对接飞书告警

    prometheus对接飞书告警 环境 名称 ip地址 cpu 内存 yz-feishu 10.65.6.91 4c 8G 飞书创建群组机器人,参考飞书官网 https://www.feishu.cn ...

  2. 【IDEA】测试类(test)的模板及定义

    人和动物的区别是:能制造和使用工具.因为,工具大大便利了我们的生活. 我们在使用Idea开发java项目的过程中,有些代码是固定的,我们能不能只写几个字,就代表一连串的代码.例如,这里,我们只是输入了 ...

  3. three.js基础用法

    import * as THREE from '../libs/build/three.module.js'; import { OrbitControls } from '../libs/jsm/c ...

  4. Python面向对象编程——一些类定义(杂)

    一.abstractmethod 子类必须全部实现重写父类的abstractmethod方法 非abstractmethod方法可以不实现重写 带abstractmethod方法的类不能实例化 fro ...

  5. spider_爬取内涵吧的段子(二级深度爬取)

    '''爬取内涵吧段子所有笑话(带标题,作者)总结:解码上,使用gbk2312编码的,我们可以采取gbk解码. 不会报错'''from fake_useragent import FakeUserAge ...

  6. 分布式接口幂等性、分布式限流:Guava 、nginx和lua限流

    接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用. 举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此 ...

  7. Jmeter添加BeanShell后置处理程序保存响应结果

    对于某些请求,无法通过保存响应到文件这个组件来进行保存(会出现UNKNOW文件类型). 那么就可以通过BeanShell后置处理程序来进行将响应结果直接输出到文件,并可以直接指定文件名和后缀. imp ...

  8. 使用MailKit发送邮件

    MailKit的项目地址:https://github.com/jstedfast/MailKit 使用: 1 定义发送邮件所需要的model或者dto,该model可根据个人的需要进行修改 1 pu ...

  9. Core_DataCollect BacNet说明

    /* * BACnet_AI 0 模拟输入.定义一个标准对象,其属性表示模拟输入的外部可见特征. BACnet_AO 1 模拟输出.定义一个标准对象,其属性表示模拟输出的外部可见特征. BACnet_ ...

  10. Spring Boot统一日志框架

    一.日志框架的选择 市面上常见的日志框架有很多,它们可以被分为两类:日志门面(日志抽象层)和日志实现,如下表.  日志分类 描述 举例 日志门面(日志抽象层) 为 Java 日志访问提供一套标准和规范 ...