我有这个要求,我需要我的应用程序来生成持久序列。通常情况下,我会使用数据库但不幸的是,我的数据库不支持任何序列。
在这种情况下,我想开发一个API以便坚持下去,我在Google的Guava Library - AtomicLongMap中找到了这个类,这正是我所需要的。问题是,我需要我的值继续重新启动,是否有任何我可以使其持久化并在崩溃中存活?
先谢谢, 问候,
答案 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);
}
}