【java】保留前N月数据文件,定期删除数据

数据越积越多,过于冗余;数据库定期删除指定时间前的数据;文件生成的删除指定时间前端文件

SFTP文件定期删除

java sftp 定时清理指定文件中固定时间

  • 依赖
<!-- ftp文件上传/下载Jar包 -->
<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.54</version>
</dependency>
  • 代码

import com.jcraft.jsch.*;import java.util.Vector;/*** java sftp 定时清理指定文件中固定时间*/
public class SftpCleanup {public static void main(String[] args) throws JSchException {String host = "127.0.0.1"; // SFTP主机地址int port = 22; // SFTP端口号String username = "xxx"; // SFTP登录用户名String password = "xxxx"; // SFTP登录密码Session session = null;ChannelSftp channelSftp = null;try {JSch jsch = new JSch();// 创建Session对象session = jsch.getSession(username, host, port);session.setPassword(password);session.setConfig("StrictHostKeyChecking", "no");session.connect();// 打开ChannelSftp通道channelSftp = (ChannelSftp) session.openChannel("sftp");channelSftp.connect();// 设置删除目标文件的路径及过期时间(单位为分钟)// 默认为当前日期之前的24小时内的文件将被删除//long expireTimeInMinutes = 60 * 24;long currentTimeMillis = System.currentTimeMillis();//long threeMonthsAgoInMillis = currentTimeMillis - 2 * 7 * 60 * 60 * 1000L; // 当前时间减去N个天的毫秒数long threeMonthsAgoInMillis = currentTimeMillis - 90 * 24 * 60 * 60 * 1000L; // 当前时间减去3个月(3*30)的毫秒数String targetPath = "/data/file/hi/"; // 目标文件路径Vector<ChannelSftp.LsEntry> fileList = channelSftp.ls(targetPath); // 要清理的目标文件所在路径for (ChannelSftp.LsEntry entry : fileList) {if (!entry.getAttrs().isDir()) {long fileCreationTime = entry.getAttrs().getMTime() * 1000L;printTimeDifference(true, fileCreationTime, threeMonthsAgoInMillis);if (fileCreationTime < threeMonthsAgoInMillis) {channelSftp.rm(targetPath + entry.getFilename()); // 删除符合条件的文件System.out.println("成功删除文件:" + targetPath + entry.getFilename());} else {System.out.println("未到达过期时间,不处理文件:" + targetPath + entry.getFilename());}}}} catch (JSchException | SftpException e) {e.printStackTrace();} finally {// 关闭ChannelSftp通道和会话if (channelSftp != null && channelSftp.isConnected()) {channelSftp.disconnect();}if (session != null && session.isConnected()) {session.disconnect();}}}/*** 打印计算时间差** @param fileCreationTime  sftpFileTime* @param presetsTimeMillis threeMonthsAgoInMillis*/private static void printTimeDifference(boolean debugger, long fileCreationTime, long presetsTimeMillis) {// 计算两者之间的差值(单位:微秒)long diffMicroseconds = (fileCreationTime - presetsTimeMillis);// 将差值转化为小时、分钟和秒int days = (int) (diffMicroseconds / (24 * 60 * 60 * 1000));int hours = (int) (diffMicroseconds / (60 * 60 * 1000));int minutes = (int) ((diffMicroseconds % (60 * 60 * 1000)) / (60 * 1000));int seconds = (int) ((diffMicroseconds % (60 * 1000)) / 1000);// 输出结果//System.out.println("差值为 " + diffMicroseconds + " 微秒");if (debugger) {System.out.println("差值为 " + days + " 天 " + hours + " 小时 " + minutes + " 分钟 " + seconds + " 秒");}}
}

mysql保存N个月的数据

mysql中保存3个月的数据,当超过3个月之后定时清除3个月之前的数据

  • Mysql
-- 至少保留一个月数据量 delete from table_name
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);
select count(*) from table_name where create_time < DATE_SUB(NOW(), INTERVAL 1 MONTH);
  • Api
    public void deleteCustomerTouch(String monthNum) {if (StringUtils.isBlank(monthNum)) {monthNum = YsConst.Month.THREE;}//值不为空,且值为数值,且值要大于等于1if (NumberUtil.isNumber(monthNum) && NumberUtil.parseInt(monthNum) >= 1) {apiService.deleteByTime(monthNum);} else {logger.error("【apiService】其他的,参数错误 monthNum={}", monthNum);}}
  • Mapper
    <!-- 小于等于 --><delete id="deleteByTime">delete from table_name where create_time &lt;= DATE_SUB(NOW(), INTERVAL #{monthNum} MONTH)</delete>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/219153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8S(四)—pod详解

目录 pod介绍Pod的概念&#xff1a;Pod的特性&#xff1a;Pod的配置&#xff1a;Pod的控制&#xff1a;示例 YAML 文件&#xff1a; pod启动流程问题 两种方式启动镜像的升级和回滚更新 Deployment&#xff1a;回滚检查 Deployment 历史版本回滚到之前的修订版本缩放 Deploymen…

青少年CTF-Crypto(Morse code/ASCII和凯撒)

FLAG&#xff1a;你这一生到底想干嘛 专研方向: Web安全 &#xff0c;Md5碰撞 每日emo&#xff1a;不要因为别人都交卷了&#xff0c;就乱选答案 文章目录 1.Morse code2、ASCII和凯撒的约定 1.Morse code 题目提示摩尔斯电码&#xff0c;这个是给的附件 直接用摩尔斯解密&am…

Linux中的磁盘挂载与取消

Linux中的磁盘挂载与取消 前言磁盘挂载查看分区信息分区设置格式化磁盘挂载持久化挂载点配置 取消磁盘挂载查看已挂载的磁盘取消挂载 前言 今天准备给一台PVE设备添加一块磁盘&#xff0c;踩了点小坑&#xff1a;磁盘挂载后重启后发现磁盘没有被挂载&#xff0c;于是整理记录一…

antv X6

文章目录 graph配置项力导向图路由router graph配置项 https://x6.antv.antgroup.com/api/graph/graph 力导向图 https://x6.antv.antgroup.com/examples/layout/general#force 路由router https://x6.antv.antgroup.com/api/registry/router initGraph () {// https://x…

常用的测试用例大全

登录、添加、删除、查询模块是我们经常遇到的&#xff0c;这些模块的测试点该如何考虑 1)登录 ① 用户名和密码都符合要求(格式上的要求) ② 用户名和密码都不符合要求(格式上的要求) ③ 用户名符合要求&#xff0c;密码不符合要求(格式上的要求) ④ 密码符合要求&#xf…

[c]输出字符金字塔

我们可以把字符金字塔类比数字金字塔 输入3 输出 类似下图 下面附上我的代码&#xff0c;可能有些繁琐 #include<stdio.h> int main() {char s;scanf("%c",&s);int lens-64;//将字符的ascii码值减去64得到循环次数&#xff0c;比如你输入A&#xff0c;l…

Java入门基础:浅显易懂 死循环

文章目录 一、什么是死循环二、以fo循环示例三、如何避免死循环 一、什么是死循环 死循环就是循环语句的 循环布尔表达式 一直为true&#xff0c;没有终止循环的条件或者终止循环的条件根本不可能达成 二、以fo循环示例 /** 终止循环的条件根本不可能达成* 循环布尔表达式&a…

一篇文章,带你详细了解华为认证体系证书(二)

一篇文章&#xff0c;带你详细了解华为认证体系证书 &#xff08;一&#xff09;_华为高斯数据库证书_PICACHU的博客-CSDN博客一、总体概括一、总体概括华为认证是华为技术有限公司基于“平台生态”战略&#xff0c;围绕“云-管-端”协同的新ICT技术架构&#xff0c;打造的业界…

Spring Boot--Freemarker渲染技术+实际案例

目录 Freemarker 1.1.什么是Freemarker 1.2.Freemarker模板组成部分 1.3.优点 FreeMarker常见的方法&#xff1a; 2.2.2.数值 2.2.3.布尔值 2.2.4.日期 2.3.常见指令 2.3.1.处理不存在的值 assign 2.3.4.list 2.3.5.include SpringBoot整合Freemarker Freemarker…

STM32-TIM定时器输出比较

目录 一、输出比较简介 二、PWM简介 三、输出比较通道&#xff08;通用&#xff09; 四、输出比较通道&#xff08;高级&#xff09; 五、输出比较模式 六、PWM基本结构 七、PWM参数计算 八、外设介绍 8.1 舵机 8.2 直流电机及驱动 九、开发步骤 十、输出比较库函数…

每日一题,杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]]

机器学习笔记:linear scaling learning rate (学习率 和batch size的关系)

在训练神经网络的过程中&#xff0c;随着batch size的增大&#xff0c;处理相同数据量的速度会越来越快&#xff0c;但是达到相同精度所需要的epoch数量越来越多 换句话说&#xff0c;使用相同的epoch数量时&#xff0c;大batch size训练的模型与小batch size训练的模型相比&am…

【C++】POCO学习总结(十五):字符串操作

【C】郭老二博文之&#xff1a;C目录 1、简介 POCO提供一些函数来处理 std::string 和 std::wstring&#xff1b; 比如&#xff1a; 去除空格大小写转换不区分大小写比较字符转换和子字符串替换连接 许多函数有两种变体: 返回一个新字符串而不修改原字符串的函数;直接修改…

限流常用算法以及基于Sentinel的微服务限流及熔断

一、服务限流的作用及实现 在没有任何保护机制的情况下&#xff0c;如果所有的流量都进入服务器&#xff0c;很可能造成服务器宕机导致整个系统不可用&#xff0c;从而造成巨大的损失。为了保证系统在这些场景中仍然能够稳定运行&#xff0c;就需要采取一定的系统保护策略&…

Unity_ET框架项目-斗地主_启动运行流程

unity_ET框架项目-斗地主_启动运行流程 项目源码地址&#xff1a; Viagi/LandlordsCore: ET斗地主Demohttps://github.com/Viagi/LandlordsCore下载项目到本地。 启动运行步骤&#xff1a; 下载目录如下&#xff1a; 1. VS&#xff08;我用是2022版VisualStudio&#xff09…

【机器学习】多模态机器学习

多模态机器学习是指利用多种不同的数据类型&#xff08;如图像、文本、音频等&#xff09;来训练和优化机器学习模型。相比于单一模态的机器学习&#xff0c;多模态机器学习可以更好地模拟现实世界中的复杂信息交互&#xff0c;从而提高模型的性能和泛化能力&#xff0c;同时也…

[英语学习][13][Word Power Made Easy]的精读与翻译优化

[序言] 本篇内容主要是学习语法分析, 而且这次作者翻译也不错. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家这次能学到东西, 同时加入我的社区讨论与交流英语相关的内容. [原著英文与翻译版对照][第20页] There is no doubt that the…

大数据机器学习与深度学习—— 生成对抗网络(GAN)

GAN概述 在讲GAN之前&#xff0c;先讲一个小趣事&#xff0c;你知道GAN是怎么被发明的吗&#xff1f;据Ian Goodfellow自己说&#xff1a; 之前他一直在研究生成模型&#xff0c;可能是一时兴起&#xff0c;有一天他在酒吧喝酒时&#xff0c;在酒吧里跟朋友讨论起生成模型。然…

Linux—深入理解进程的概念,PCB,父子进程及查看进程信息的两种方法

进程的概念 课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的程序等。 内核观点&#xff1a;担当分配系统资源&#xff08;CPU&#xff0c;内存&#xff09;的实体。 1.描述进程-PCB 我们知道程序是代码编译好后形成的可执行文件&#xff0c;存放在磁盘上。而我…

Qt设置类似于qq登录页面(ikun)

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QWindow> #include <QIcon> #include <QLabel> #include <QMovie> #include <QLineEdit> #include <QPushButton>QT_BEGIN_NAMESPACE namespace Ui { class…