我如何坚持Guava AtomicLongMap?

时间:2018-03-29 17:05:59

标签: java guava

我有这个要求,我需要我的应用程序来生成持久序列。通常情况下,我会使用数据库但不幸的是,我的数据库不支持任何序列。

在这种情况下,我想开发一个API以便坚持下去,我在Google的Guava Library - AtomicLongMap中找到了这个类,这正是我所需要的。问题是,我需要我的值继续重新启动,是否有任何我可以使其持久化并在崩溃中存活?

先谢谢, 问候,

1 个答案:

答案 0 :(得分:2)

由于重启后java应用程序不会运行,因此您需要在JVM之外存储数据。

通常情况下,这可能是一个数据库,但听起来这个选项并不适合你。

另一种选择是将数据写入文件。当应用程序启动时,它将读取文件并填充AtomicLongMap。

以下是如何从/向文件读取和写入状态的示例:

进口

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;

从文件中读取

@SuppressWarnings("unchecked")
public AtomicLongMap<String> readFromFile(File file) throws IOException, ClassNotFoundException { 

    try(FileInputStream fis = new FileInputStream(file);

        ObjectInputStream ois = new ObjectInputStream(fis);) {


    Map<String,Long>readObj = (Map<String, Long>)ois.readObject();

    return AtomicLongMap.create(readObj);

    }


  }

写入文件

public void writeToFile(AtomicLongMap<String>map, File file) throws IOException {
    HashMap<String, Long>newMap = new HashMap<>( map.asMap());

    try(FileOutputStream fout = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(fout);) {

      oos.writeObject(newMap);

    }

  }