如何将每个请求存储在同一文件中

时间:2018-09-23 06:18:00

标签: java rest spring-boot filesystems microservices

我正在创建一项服务,而无需使用数据库。

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以拥有2个文件:

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

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

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

答案 1 :(得分: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
}