EhCache未找到序列化程序

时间:2016-09-26 13:09:14

标签: ehcache

我正在以下列方式初始化缓存:

CacheManager cacheManager;

cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build();
cacheManager.init();

Cache<String, SmsMessageDto> myCache = cacheManager.createCache("myCache", CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, SmsMessageDto.class)
    .withExpiry(Expirations.timeToLiveExpiration(new Duration(cacheDuration, TimeUnit.MINUTES)))
    .build());

这给了我以下警告:

org.ehcache.core.EhcacheManager - Could not create serializers for myCache
org.ehcache.spi.serialization.UnsupportedTypeException: No serializer found for type 'com.example.dto.SmsMessageDto'
    at org.ehcache.impl.internal.spi.serialization.DefaultSerializationProvider$AbstractProvider.getClassFor(DefaultSerializationProvider.java:271) ~[ehcache-3.0.0.rc1.jar:3.0.0.rc1]
    at org.ehcache.impl.internal.spi.serialization.DefaultSerializationProvider$TransientProvider.createSerializer(DefaultSerializationProvider.java:149) ~[ehcache-3.0.0.rc1.jar:3.0.0.rc1]
    at org.ehcache.impl.internal.spi.serialization.DefaultSerializationProvider$AbstractProvider.createValueSerializer(DefaultSerializationProvider.java:239) ~[ehcache-3.0.0.rc1.jar:3.0.0.rc1]
    at org.ehcache.impl.internal.spi.serialization.DefaultSerializationProvider.createValueSerializer(DefaultSerializationProvider.java:96) ~[ehcache-3.0.0.rc1.jar:3.0.0.rc1]
    at org.ehcache.core.EhcacheManager.getStore(EhcacheManager.java:455) [ehcache-3.0.0.rc1.jar:3.0.0.rc1]
    at org.ehcache.core.EhcacheManager.createNewEhcache(EhcacheManager.java:308) [ehcache-3.0.0.rc1.jar:3.0.0.rc1]
    at org.ehcache.core.EhcacheManager.createCache(EhcacheManager.java:261) [ehcache-3.0.0.rc1.jar:3.0.0.rc1]
    at org.ehcache.core.EhcacheManager.createCache(EhcacheManager.java:240) [ehcache-3.0.0.rc1.jar:3.0.0.rc1]
    at at.xcard.helper.SmsFailedCache.init(SmsFailedCache.java:45) [classes/:na]
    at at.xcard.SmsWorker.<init>(SmsWorker.java:49) [classes/:na]
    at at.xcard.Main.main(Main.java:36) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_25]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_25]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_25]
    at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_25]
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) [idea_rt.jar:na]

问题:我怎样才能说服EhCache使用com.example.dto.SmsMessageDto对象的toString方法?

2 个答案:

答案 0 :(得分:0)

鉴于您没有使用offheap或磁盘层,因此不需要序列化程序。

现在我看到您正在使用版本3.0.0.rc1。我强烈建议不要在此时使用RC,而是使用最新的(此时)3.1.2

我相信你所遇到的是一个很可能已经修复的错误。

答案 1 :(得分:0)

简而言之,这是不可能的。您必须在类SmsMessageDto中实现Serializable接口。它将为您的Serializable类创建一个序列化器,并且不会再显示Exception。这个答案基于以下链接http://www.ehcache.org/documentation/3.1/serializers-copiers.html部分&#34;捆绑式实施&#34;

从文档中: &#34;默认情况下,缓存管理器预先配置了专门优化的Serializer,它可以按以下顺序处理以下类型:

的java.io.Serializable

java.lang.Long中

java.lang.Integer中

java.lang.Float中

java.lang.Double中

java.lang.Character中

java.lang.String中

字节[]&#34;