Java 本地存储静态数据
我目前有200行key->value,value,其中一个key有两个值。即使我只使用第一个值 我想知道如何处理这个问题,是使用json文件存储所有这些数据并将其转换为映射,还是创建一个enum类来存储所有这些数据Java 本地存储静态数据,java,json,spring,Java,Json,Spring,我目前有200行key->value,value,其中一个key有两个值。即使我只使用第一个值 我想知道如何处理这个问题,是使用json文件存储所有这些数据并将其转换为映射,还是创建一个enum类来存储所有这些数据 假设数据需要持久化,我不知道如何解决这个问题 在java中,这样的需求很方便。这可用于存储任何可序列化类型 地图可以直接存储在文件中并检索。 它具有对事务的嵌入式支持 import org.mapdb.DB; import org.mapdb.DBMaker; private DB
假设数据需要持久化,我不知道如何解决这个问题 在java中,这样的需求很方便。这可用于存储任何可序列化类型 地图可以直接存储在文件中并检索。 它具有对事务的嵌入式支持
import org.mapdb.DB;
import org.mapdb.DBMaker;
private DB mapDb;
private ConcurrentMap<String, LinkedHashSet> translationMap;
@PostConstruct
private void init() {
log.info("Map db Start initiated...");
mapDb = DBMaker
.fileDB(new File(nosqlDbPath))
.fileMmapEnable()
.transactionEnable()
.make();
translationMap = (ConcurrentMap<String, LinkedHashSet>) mapDb.hashMap("map").createOrOpen();
log.info("Map db Start completed.");
}
@PreDestroy
private void close() {
log.info("Map db shutdown initiated...");
mapDb.commit();
mapDb.close();
log.info("Map db shutdown complete.");
}
import org.mapdb.DB;
导入org.mapdb.DBMaker;
私有数据库;
私有ConcurrentMap translationMap;
@施工后
私有void init(){
log.info(“启动映射数据库…”);
mapDb=DBMaker
.fileDB(新文件(nosqlDbPath))
.fileMmapEnable()
.transactionEnable()
.make();
translationMap=(ConcurrentMap)mapDb.hashMap(“map”).createOrOpen();
log.info(“Map db Start completed.”);
}
@发情前期
私人作废关闭(){
log.info(“映射数据库关闭已启动…”);
commit();
mapDb.close();
log.info(“映射数据库关闭完成”);
}
translationMap将在启动时保存所有数据
如果数据需要持久化,不要忘记添加MapDB JAR 在java中,这样的需求很方便。这可用于存储任何可序列化类型 地图可以直接存储在文件中并检索。 它具有对事务的嵌入式支持
import org.mapdb.DB;
import org.mapdb.DBMaker;
private DB mapDb;
private ConcurrentMap<String, LinkedHashSet> translationMap;
@PostConstruct
private void init() {
log.info("Map db Start initiated...");
mapDb = DBMaker
.fileDB(new File(nosqlDbPath))
.fileMmapEnable()
.transactionEnable()
.make();
translationMap = (ConcurrentMap<String, LinkedHashSet>) mapDb.hashMap("map").createOrOpen();
log.info("Map db Start completed.");
}
@PreDestroy
private void close() {
log.info("Map db shutdown initiated...");
mapDb.commit();
mapDb.close();
log.info("Map db shutdown complete.");
}
import org.mapdb.DB;
导入org.mapdb.DBMaker;
私有数据库;
私有ConcurrentMap translationMap;
@施工后
私有void init(){
log.info(“启动映射数据库…”);
mapDb=DBMaker
.fileDB(新文件(nosqlDbPath))
.fileMmapEnable()
.transactionEnable()
.make();
translationMap=(ConcurrentMap)mapDb.hashMap(“map”).createOrOpen();
log.info(“Map db Start completed.”);
}
@发情前期
私人作废关闭(){
log.info(“映射数据库关闭已启动…”);
commit();
mapDb.close();
log.info(“映射数据库关闭完成”);
}
translationMap将在启动时保存所有数据
不要忘记添加MapDB JAR,因为它只有200个条目,您有很多选择 1。只需将其存储在Hashmap中。 优点:
- 尽可能简单。O(1)向上看
- 如果有多个线程对此进行了变异,那就是自找麻烦
- 秩序将不会维持
- 对TTL没有规定
静态
块或@PostConstruct
带注释的方法或构造函数来填充它。或者,如果您在spring boot land中,您可以利用@Configuration
带注释的类和@Value
带注释的映射成员变量以及一个属性/yaml文件,在该文件中您拥有所有数据并将其注入
关于2个值
如果您确定,您将只获得2个值,例如,我会将其更改为类型化类
class Values {
Value left;
Value right;
}
毕竟它不是一个列表,而是一个强类型语言程序,因为它只有200个条目,所以你有很多选择 1。只需将其存储在Hashmap中。 优点:
- 尽可能简单。O(1)向上看
- 如果有多个线程对此进行了变异,那就是自找麻烦
- 秩序将不会维持
- 对TTL没有规定
静态
块或@PostConstruct
带注释的方法或构造函数来填充它。或者,如果您在spring boot land中,您可以利用@Configuration
带注释的类和@Value
带注释的映射成员变量以及一个属性/yaml文件,在该文件中您拥有所有的dat