SPRING DATA JPA 中几种缓存的配置

摘要: 在用spring data jpa的过程中,采用了ehcache 来做缓存, 是否需要二级缓存,一般不需要,这得看业务的需要,因为这东西如果配置不好,反而会导致性能下降,但如果是有些数据,基本不改动,长期不变,很少修改,而且数据量适中,并且外部使用频率高的情况下,还是可以使用的。就目前研究spring data jpa 来说,有三种情况下有可能会使用到缓存1. spring data jpa 自身的方法2. 扩展spring data jpa 的方法3.完全自己用EntityManager 写语句的缓存.

在用spring data jpa的过程中,采用了ehcache 来做缓存, 是否需要二级缓存,一般不需要,这得看业务的需要,因为这东西如果配置不好,反而会导致性能下降,但如果是有些数据,基本不改动,长期不变,很少修改,而且数据量适中,并且外部使用频率高的情况下,还是可以使用的。就目前研究spring data jpa 来说,有三种情况下有可能会使用到缓存
1. spring data jpa 自身的方法
2. 扩展spring data jpa 的方法
3.完全自己用EntityManager 写语句的缓存.

其实现方式,基本如下,用代码表示

public interface UserDao extends CrudRepository,UserCustomer{	
	
	/**
	 * 第一种情况的缓存,处理spring data jpa自身的方法
	 * @param id
	 * @return
	 */
	
	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") })
	public User findById(long id);
	
	
	/**
	 * 第二种情况缓存,处理能根据 spring data jpa 扩展的方法.
	 * @return
	 */
	@Query("from User")
	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") })
	List findAllCached();
	

}


如果是自己写语句的缓存,用如下方式
public class UserDaoImpl implements UserCustomer {
	
	@PersistenceContext
	private EntityManager em;
	
    /**
     * 第三种缓存,采用 setHint 的方式处理.
     */
	public User findByCustomizeId() {
		return (User) em.createQuery("from User p where p.id=1")
		.setHint("org.hibernate.cacheable", true).getSingleResult();		
	}



当然在实体类上也要注明,使用缓存
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY,region="mycache")
@Cacheable(true)
@Entity
@Table(name="XUSER")
public class User {
...........
}

至于ehcache 的配置很简单的几行xml 配置,比如
     
       
            
        

     


在这几种情况下,测试,一旦缓存之后,是看不到发出sql语句的,说明确实使用了缓存.

上一篇: Spring MVC 国际化备忘录
下一篇: java 流与byte 互相转换,并与base64编码转换
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号