You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
4.1 KiB
118 lines
4.1 KiB
package com.zc.business.controller;
|
|
|
|
import com.ruoyi.common.config.RuoYiConfig;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDateTime;
|
|
import java.util.Date;
|
|
|
|
/**
|
|
* 数据库定时备份任务
|
|
* 在backup文件夹中备份最近七日的数据库文件, 备份文件夹 与当前程序同一目录
|
|
*/
|
|
@Component
|
|
@Slf4j
|
|
public class DcMYSQLJob {
|
|
//private final Environment environment;
|
|
|
|
private static final String IP = "10.0.81.202";
|
|
|
|
private static final String PORT = "3306";
|
|
|
|
private static final String USER = "root";
|
|
|
|
private static final String PASSWORD = "mysql123!@#";
|
|
|
|
//public DcMYSQLJob(Environment environment) {
|
|
// this.environment = environment;
|
|
//}
|
|
|
|
@Scheduled(cron = "0 0 22 * * ?")
|
|
//@Scheduled(cron = "0 10 * * * ?")
|
|
public void backupAthena() throws IOException {
|
|
String url = "jdbc:mysql://10.0.81.202:3306/athena?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true";
|
|
|
|
extracted(url, "athena");
|
|
}
|
|
|
|
@Scheduled(cron = "0 30 22 * * ?")
|
|
//@Scheduled(cron = "0 20 * * * ?")
|
|
public void backupJiHeDC() throws IOException {
|
|
// 数据库配置信息
|
|
String url = "jdbc:mysql://10.0.81.202:3306/jihe-dc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true";
|
|
|
|
extracted(url, "jihe-dc");
|
|
}
|
|
|
|
@Scheduled(cron = "0 0 23 * * ?")
|
|
//@Scheduled(cron = "0 30 * * * ?")
|
|
public void backupJiHeDCPro() throws IOException {
|
|
// 数据库配置信息
|
|
String url = "jdbc:mysql://10.0.81.202:3306/jihe-dc-pro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true";
|
|
|
|
extracted(url, "jihe-dc-pro");
|
|
}
|
|
|
|
private static void extracted(String url, String nameOfTheDatabase) throws IOException {
|
|
LocalDateTime now = LocalDateTime.now();
|
|
log.info("*******************时间:【{}】, 系统开启定时任务数据库备份*******************", now);
|
|
|
|
// 第三个 :号下标
|
|
int subStrIndex = url.indexOf(":", url.indexOf(":", url.indexOf(":") + 1) + 1);
|
|
|
|
// IP
|
|
String host = url.substring(url.indexOf("//") + 2, subStrIndex);
|
|
|
|
// 端口
|
|
String subStr2 = url.substring(subStrIndex);
|
|
|
|
String port = subStr2.substring(1, subStr2.indexOf("/"));
|
|
|
|
// 数据库名
|
|
String dataBaseName = subStr2.substring(subStr2.indexOf("/") + 1, subStr2.indexOf("?"));
|
|
|
|
// 环境
|
|
String os = System.getProperties().getProperty("os.name");
|
|
|
|
log.info("备份环境信息:【{}】, 用户名:【{}】,密码:【{}】, 地址:【{}】, 端口:【{}】,数据库:【{}】", os, url, PASSWORD, host, port, dataBaseName);
|
|
|
|
|
|
LocalDate localDate = LocalDate.now();
|
|
|
|
String filePath = RuoYiConfig.getDownloadMysqlPath();
|
|
|
|
Date date = new Date();
|
|
|
|
String format = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss ").format(date).replace(" ", "");
|
|
|
|
String fileName = nameOfTheDatabase + "_" + format + ".sql";
|
|
|
|
File file = new File(filePath, fileName);
|
|
|
|
file.getParentFile().mkdirs();
|
|
|
|
file.createNewFile();
|
|
|
|
// 备份今天数据库
|
|
DcMYSQLUtil.backup(IP, PORT, USER, PASSWORD, dataBaseName, file);
|
|
|
|
|
|
// 删除七天前数据库备份文件 LocalDate
|
|
LocalDate before = localDate.minusDays(7);
|
|
String fileBeforeName = nameOfTheDatabase + "-" + before + ".sql";
|
|
File fileBefore = new File(filePath, fileBeforeName);
|
|
if (fileBefore.exists()) {
|
|
fileBefore.delete();
|
|
}
|
|
log.info("*******************时间:【{}】, 系统结束定时任务数据库备份*******************", now);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|