springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档

server/2024/10/18 8:31:13/

要在 Spring Boot 中实现实时写入数据到文件,并在文件大小大于 100MB 时按照日期时间归档,主要步骤如下:

  1. 文件写入功能:设置一个日志文件,实时写入数据。
  2. 文件大小检测:在写入数据时检测文件大小,当文件超过 100MB 时执行归档操作。
  3. 文件归档:按日期时间格式重命名并归档现有文件,创建新的日志文件继续写入。

下面是详细的实现步骤和完整代码:

伪代码方案

  1. 初始化 FileWriter,用于实时写入数据。
  2. 每次写入数据后检测当前文件大小。
  3. 当文件大小超过 100MB 时,按照 yyyyMMdd_HHmmss 格式生成归档文件名,并将原文件重命名。
  4. 创建一个新的文件继续写入。

代码实现

java">package com.example.filewriter;import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;import java.io.*;
import java.nio.file.*;
import java.text.SimpleDateFormat;
import java.util.Date;@Service
public class FileWritingService {private static final String FILE_PATH = "logs/data.log";private static final long MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MBprivate BufferedWriter writer;public FileWritingService() throws IOException {initWriter();}// 初始化文件写入器private void initWriter() throws IOException {File file = new File(FILE_PATH);if (!file.exists()) {file.getParentFile().mkdirs();file.createNewFile();}writer = new BufferedWriter(new FileWriter(file, true)); // 追加模式写入}// 实时写入数据public void writeData(String data) throws IOException {writer.write(data);writer.newLine();writer.flush();checkFileSize(); // 检查文件大小}// 检查文件大小是否超过 100MBprivate void checkFileSize() throws IOException {File file = new File(FILE_PATH);if (file.length() > MAX_FILE_SIZE) {archiveFile();initWriter(); // 重新初始化写入器}}// 按日期时间归档文件private void archiveFile() throws IOException {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");String timestamp = sdf.format(new Date());Path source = Paths.get(FILE_PATH);Path target = Paths.get("logs/archive/data_" + timestamp + ".log");// 确保目录存在Files.createDirectories(target.getParent());// 重命名文件进行归档Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);}// 模拟实时写数据,每5秒写一次@Scheduled(fixedRate = 5000)public void simulateWrite() throws IOException {writeData("This is a sample log entry at " + new Date());}
}

关键点说明

  1. 文件写入:使用 BufferedWriter 实现实时写入,确保每次写入后调用 flush() 以立即将数据写入文件。
  2. 文件大小检测:在每次写入后调用 checkFileSize() 检测文件大小。如果大于 100MB,就调用 archiveFile() 进行归档。
  3. 归档文件:通过 Files.move() 重命名现有文件,归档到 logs/archive/ 目录下,文件名按照 yyyyMMdd_HHmmss 格式命名。
  4. 定时写入:使用 @Scheduled 注解模拟每5秒写入一次数据,实际可以根据需求调整。

依赖配置

  • 确保你的 Spring Boot 项目中引入了 spring-boot-starter,并在 application.properties 中启用了 @Scheduled 注解功能:
spring.main.allow-bean-definition-overriding=true

http://www.ppmy.cn/server/116947.html

相关文章

基于HTML+JS+CSS+Echarts实现的设备环境监测可视化平台前端整套模板

效果图 基于HTMLJSCSSEcharts实现的设备环境监测可视化平台前端整套模板。可用过修改源码快速完成需求。 源码结构 下载地址

【Hadoop|MapReduce篇】Hadoop序列化概述

1. 什么是序列化 序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。 反序列化就是将收到的字节序列(或其他数据传输协议)或者磁盘的持久化数…

Linux系统使用Docker安装DockerUI并实现远程管理本地容器无需公网IP

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

Mybatis-plus进阶篇(一)

文章目录 一.条件构造器二.功能详解1. allEq使用范围方法签名:参数说明示例 一.条件构造器 MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件&#xff0…

Linux云计算 |【第二阶段】SHELL-DAY5

主要内容: awk命令、内置变量(FS、$0、$1、$2、NF、NR)、过滤时机(BEGIN{}、{}、END{})、处理条件(正则、&&、||、~\!~、等)、awk数组、监控脚本、安全检测脚本 一、awk介绍 awk 是一…

SpringBoot集成MyBatis-Plus

MyBatis-Plus简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 1.愿景 我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P&#…

python绘制3D瀑布图

成品: 代码: import matplotlib.pyplot as plt import matplotlib.ticker as ticker from mpl_toolkits.mplot3d.art3d import Poly3DCollection import numpy as npdef line_3d(x, y, z, x_label_indexs):"""在y轴的每个点,…

2.滑动窗口算法—字符串的排列

”字符串的排列“难度为Medium: 输入两个字符串 S 和 T,请你用算法判断 S 是否包含 T 的排列,也就是要判断 S 中是否存在一个子串 是 T 的一种全排列。 比如输入 S "helloworld",T "oow",算法返…