buntinginfo 2018-04-23 16:23 采纳率: 0%
浏览 1275
已结题

Java缓存问题 Ehcache 报错,时间一长就报异常,读数据库是映射的数据库表 高手进

系统时间一长,就会报Ehcache 异常
报错位置,query这个地方
List articles = this.articleService.query(
"select obj from Article obj order by obj.addTime desc", null,
0, 6);

第2级报错位置 query
public List query(String query, Map params, int begin, int max)
{
return this.articleDao.query(query, params, begin, max);
}
Eheache配置
<?xml version="1.0" encoding="UTF-8"?>


timeToIdleSeconds="1200" timeToLiveSeconds="1200"
overflowToDisk="true" clearOnFlush="true"
memoryStoreEvictionPolicy="LFU">

maxElementsOnDisk="10" eternal="false" overflowToDisk="true"
diskSpoolBufferSizeMB="20" timeToIdleSeconds="120"
timeToLiveSeconds="120" memoryStoreEvictionPolicy="LFU" />
<!-- 单独对某个entity的缓存策略设置-->
maxElementsInMemory="100" eternal="false" timeToIdleSeconds="1200"
timeToLiveSeconds="1200" overflowToDisk="true" clearOnFlush="true">


再描述下报错,就是查询访问数据库的时候,是用配置好的框架,直接映射访问数据库。
然后读好的数据加载到缓存里面应该是,时间一长Ehcache就报错了。
也就是说时间一长就不映射数据库了,或者读缓存没读出来,这个是什么原因呢。

高手麻烦看下啊,我可能描述没那么清晰
用的 JpaDaoSupport query.setHint("org.hibernate.cacheable", Boolean.valueOf(true));
具体相关程序请看下面报错图片啊,初步怀疑是映射表到缓存时间一到,缓存成null了,是不是Eheache缓存没有配置好

图片说明
图片说明
图片说明
图片说明

  • 写回答

3条回答 默认 最新

  • Studious_Li 2018-04-23 23:42
    关注

    个人没有遇到过此类问题,但是建议按照如下顺序解决。请注意,*我这里使用的Ehcache版本是2.10.4*.

    • 根据异常栈调用信息查看源码,这个很容易定位。
    • 这里看到的代码如下:
     public final Object get(Object key) throws CacheException {
            try {
                    LOG.debug("key: {}", key);
                if (key == null) {
                    return null;
                } else {
                    Element element = cache.get(key);
                    if (element == null) {
    
                            LOG.debug("Element for key {} is null", key);
                        return null;
                    } else {
                        return element.getObjectValue();
                    }
                }
            } catch (net.sf.ehcache.CacheException e) {
                throw new CacheException(e);
            }
        }
    
    • 分析源码,我们可以得出结论:
      1. 我们可以打开debug级别日志查看相关信息
      2. 异常栈的信息应该是这个方法本身的throw new CacheException(e);这句报错了,没有此构造方法
    • 根据以上结论,可以从日志的输出验证是什么情况下会出现此异常,使用相应方法规避。
    • 或者,查看CacheException这个类,确认下为什么没有构造方法,是不是有多个版本的jar包或者其他问题。
    评论

报告相同问题?

悬赏问题

  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思