java EhCache磁盘持久性可以持久化任意对象
我想使用EhCache在磁盘上持久化对象,所以下次我将运行我的应用程序时,它将从中加载。在他们的文档中,有以下使用PersistentCacheManager类执行此操作的示例:
PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder().with(CacheManagerBuilder.persistence(new File(getStoragePath(), "myData"))).withCache("persistent-cache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
ResourcePoolsBuilder.newResourcePoolsBuilder().disk(10, MemoryUnit.MB, true))).build(true);
persistentCacheManager.close();
该示例运行良好,但如果CacheConfigurationBuilder对象定义了硬编码为Long和String的键和值的类,那么我就有问题了。我希望保留仲裁类的实例,而不是预定义哪些实例。此外,CacheConfigurationBuilder不会接受对象。类或哈希映射。例如,类
如何使用EhCache在磁盘上持久化任意实例类
# 1 楼答案
Ehcache可以接受任何键或值。默认情况下,它要求它们必须是可序列化的。否则,它无法知道如何将其存储在堆外或磁盘上
HashMap
是可序列化的,因此您不会从中得到警告Map
不是。因此,您会得到一个警告,但如果实现实际上是可序列化的,那么它仍然可以工作然而,如果您确实存储了一个不可序列化的对象,那么您确实会得到一个异常。解决方案是指定一个键和/或值序列化程序,告诉Ehcache如何存储所需的内容。完整的文档是there
现在让我们看一个例子。您需要一个要缓存的类
MyClass
还有一个测试,确保它能正常工作
您的序列化程序将如下所示: