Spring @Cacheable Spel 应用

商吉婆尼 2014-07-15 06:29:36
最近在用 Spring + Hibernate 做项目.

涉及到 数据库的时候,使用缓存 提高效率。

但 Spring 的 缓存机制没用好。

就此想请教下怎么用。


@Cacheable(value = "${ehcache_name}", condition = "#result != null")
public T get(PK id) {
return this.getDao().get(id);
}


做个 虚 AbstractService<T, PK>

我是抄别人的,希望#result 能得到函数返回值,如果不是 null 就进入缓存。
但是实际上,加了 condition 之后,所有的都没进入缓存,去掉 condition,就行了。

请问 想实现我的想法的话,condition 该怎么写?


还有个问题:

@Cacheable(value = "${ehcache_name}", key = "#this.getClass().getSimpleName() + #id", condition = "#result != null")
public T get(PK id) {
T result = this.getDao().get(id);
return result;
}


如果我都只是用 AbstractService.get 方法的话,缓存 的 value 和 key 都是一样的。
Class User id = 1
Class Title id = 1
这样的话,缓存好像会混淆的呀。
希望 key 能 根据当前所在类变得不一样,怎么弄?
比如:写的取得当前所在类的类名?
...全文
776 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
残念漫者 2016-10-26
  • 打赏
  • 举报
回复
我自己的项目测试,使用`#result`结果必然为`null`。不知道是哪里出了问题。楼主`#result != null`,这个问题,应该跟我是类似的。 希望楼主可以解决。
yaowj2 2015-09-18
  • 打赏
  • 举报
回复
http://stackoverflow.com/questions/12113725/how-do-i-tell-spring-cache-not-to-cache-null-value-in-cacheable-annotation
KlausV587 2014-11-03
  • 打赏
  • 举报
回复 1
楼主不知道你解决这个问题没有,我也遇到这样的要求,在BaseDAO这里处理cache,不然得在每一个继承BaseDAO的Dao里面添加注释
商吉婆尼 2014-07-16
  • 打赏
  • 举报
回复

	@Cacheable(value = "${ehcache_name}", key = "#p0,#p1")
	private T get(Class<T> clazz, PK id) {
		System.out.println(clazz.getName() + " - " + id);
		return this.getDao().get(id);
	}

	public T get(PK id) {
		return this.get(this.getDao().getEntityClass(), id);
	}
为毛这个也 不行???!!!

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧