Ehcache不使用Spring启动应用程序

时间:2017-10-09 20:10:13

标签: spring caching spring-boot ehcache spring-cache

我有一个Spring启动应用程序,我正在使用ehcache。 Ehcache工作正常,如果我只有一个实体类但如果我有超过1个实体类,ehcache不工作,我得到以下错误: -

java.lang.ClassCastException: com.myapp.beans.Contact cannot be cast to com.myapp.beans.Department
    at com.sun.proxy.$Proxy102.findOneById(Unknown Source) ~[na:na]
    at com.myapp.service.impl.DepartmentServiceImpl.show(DepartmentServiceImpl.java:19) ~[classes/:na]

我的Java代码: -

DepartmentRepository.java

@Repository
public interface DepartmentRepository extends JpaRepository<Department, Integer> {

    @Cacheable(value="appCache")
    @Query("select d from Department d where d.id=:id")
    Department findOneById(@Param("id") int id);
}

ContactRepository

@Repository
public interface ContactRepository extends JpaRepository<Contact, Integer> {

    @Cacheable(value = "appCache")
    @Query("select c from Contact c where c.id=:id")
    Contact findOneById(@Param("id") int id);

}

ehcache.xml中

<ehcache>
    <cache name="appCache" maxBytesLocalHeap="50m" timeToLiveSeconds="100"></cache>
</ehcache>

整个代码位于 - https://github.com/iftekharkhan09/SpringCaching。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

可能你有&#34;关键冲突&#34;,因为你的缓存名称是相同的。 我建议重命名缓存,如下所示:

@Cacheable(value="appCache1")
    @Query("select d from Department d where d.id=:id")
    Department findOneById(@Param("id") int id);

@Cacheable(value = "appCache2")
    @Query("select c from Contact c where c.id=:id")
    Contact findOneById(@Param("id") int id);

此外,您还必须在ehcache.xml中创建每个缓存

另一种方法 - 在缓存中使用密钥,您可以阅读here