【问题标题】:How to Store Every request in same file如何将每个请求存储在同一个文件中
【发布时间】:2019-02-27 00:46:46
【问题描述】:

我正在创建一个服务而不使用数据库。

我将所有请求数据存储在文件系统中。

但问题出在每个请求上,它一次又一次地创建新文件,但我想将每个请求数据放在同一个文件中。

我正在使用 spring boot 开发服务。

【问题讨论】:

    标签: java rest spring-boot filesystems microservices


    【解决方案1】:

    这个人不需要spring boot,你需要做的就是写入一个缓冲的写入器并在其中添加一行。

    package com.pogs.utilities;
    
    import org.joda.time.DateTime;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * Class that implements request aggregation methods.
     *
     * @author Allan A. Chua
     * @version 1.0
     * @since August 31, 2018
     */
    public class RequestAggregator {
        private final static String REQUEST_STORE_PATH = "D:\\logs.txt";
    
        //region Private Methods
        private void storeToTextFile(String input) {
            try {
                File file = new File(REQUEST_STORE_PATH);
                BufferedWriter fw = new BufferedWriter(new FileWriter(file.getAbsoluteFile(), true));
    
                fw.write(input);
                fw.newLine();
    
                fw.flush();
                fw.close();
            } catch (IOException ex) {
                System.out.println("[" + (new DateTime()).toString() + "][Logger is experiencing troubles]");
            }
        }
        //endregion
    
        //region Methods
    
        /**
         * Method used for appending request logs inside
         * the log aggregation method.
         *
         * @param input - Message to be logged.
         */
        public void appendInfo(String input) {
            String log = "[INFO][" + (new DateTime()).toString() + "]";
            log += input;
    
            storeToTextFile(log);
            System.out.println(log);
        }
    
        /**
         * Method used for appending error request logs inside
         * the log aggregation method.
         *
         * @param input Message to be logged.
         */
        public void appendError(String input) {
            String log = "[ERROR][" + (new DateTime()).toString() + "]";
            log += input;
    
            storeToTextFile(log);
            System.out.println(log);
        }
        //endregion
    }
    

    【讨论】:

    • 是的,问题是,我没有在 File-writer 对象中添加 true 来追加,这就是它覆盖现有值的原因
    • 帅哥!如果您认为答案有帮助,您可能希望将其标记为您接受的答案,以便将来帮助其他人^_^ 很高兴您已修复它
    【解决方案2】:

    你可以有 2 个文件:

    1. 在此文件中,您将一个接一个地附加 JSON 字符串的内容

    2. 在此文件中,您将在文件 1 中您编写 JSON 的位置附加开始位置和结束位置,每个位置都在自己的行中。您还可以在此处存储其他元数据,例如请求 ID、日期等。

    因此,当您处理存储的请求时,您首先读取文件 2 以读取开始和结束位置,然后从文件 1 读取 from those positions

    【讨论】:

    • 我可以只创建一个文件并附加到该文件中吗?对于我想在该文件的下一行存储数据的每个请求,尝试在 @postconstruct 方法中创建文件,但这不起作用
    • 你可以这样做,但像我建议的那样使用“索引”文件会更快;为什么它不工作?你得到什么错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多