SpringBoot进阶(六)SpringBoot整合Ehcache - Go语言中文社区

SpringBoot进阶(六)SpringBoot整合Ehcache


前言

       本章讲解SpringBoot整合Ehcache的相关知识

方法

1.概念

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。

由于我们整合SpringData JPA也是基于Hibernate实现的,所以Hibernate的缓存机制想必大家都应有所了解,其使用的缓存器就是这个Ehcache,引入缓存处理可以大大降低数据库压力,实现快速查询的目的。

2.SpringBoot整合Ehcache步骤

1)新建相应项目

可以将上个章节的项目做一个拷贝,方便我们进行修改。

2)修改pom文件,增加缓存支持的坐标

<!-- 配置springBoot 缓存支持的启动器 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- 配置ehcache缓存器 -->
<dependency>
        <groupId>javax.cache</groupId> <!-- JSR-107 API-->
        <artifactId>cache-api</artifactId>
      </dependency>
<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache</artifactId>
</dependency>

3)创建ehcache.xml文件,该文件用来描述使用ehcache做缓存时的缓存策略

注意:本次使用的是ehcache3做缓存,其配置文件已经和ehcache2完全不同,这一点需要大家注意!!

我们拿取官方文档的配置文件做例子,其内部标签的详解也请移步ehcahe官网https://www.ehcache.org/查看详情

文件位置:

<config
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
    xmlns='http://www.ehcache.org/v3'
    xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd">

  <cache alias="foo"> 
    <key-type>java.lang.String</key-type> 
    <value-type>java.lang.String</value-type> 
    <resources>
      <heap unit="entries">20</heap> 
      <offheap unit="MB">10</offheap> 
    </resources>
  </cache>

  <cache-template name="myDefaults"> 
    <key-type>java.lang.Long</key-type>
    <value-type>java.lang.String</value-type>
    <heap unit="entries">200</heap>
  </cache-template>

  <cache alias="bar" uses-template="myDefaults"> 
    <key-type>java.lang.Number</key-type>
  </cache>

  <cache alias="simpleCache" uses-template="myDefaults" /> 

</config>

4)修改启动类文件,添加允许缓存的注解

package cn.edu.ccut;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
@EnableCaching//允许缓存
public class App {

	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}

}

5)在需要缓存的service方法上加入@Cacheable注解,表示缓存。

注意:需要指定配置文件中所涉及到的缓存策略,如:foo

package cn.edu.ccut.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.edu.ccut.bo.Users;
import cn.edu.ccut.dao.UserDAO;
import cn.edu.ccut.service.UserService;

@Service
@Transactional
public class UserServiceImpl implements UserService{
	
	@Autowired
	private UserDAO userDao;

	@Override
	@Cacheable("foo")
	public List<Users> getAllUser() {
		return userDao.findAll();
	}

}

6)最后还需要在application.properties进行修改

#Mysql JDBC
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/jwang
spring.datasource.username=root
spring.datasource.password=root
#Druid Pool
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#SpringData JPA
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
#Ehcache
spring.cache.ehcache.config=ehcache.xml

3.编写测试用例进行测试

编写测试方法:

package cn.edu.ccut.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import cn.edu.ccut.App;
import cn.edu.ccut.service.UserService;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes={App.class})
public class UserTest {

	@Autowired
	private UserService userService;

	@Test
	public void testFindAllUser() {
		//第一次查询
		userService.getAllUser();
		//第二次查询
		userService.getAllUser();
		
	}
}

在没有使用缓存的情况下,控制台输出是这样的:

我们可以看到:没有缓存的条件下,向数据库发送了两次请求,产生了两次SQL语句。

加入缓存后:

由此可见,我们的缓存成功起到了效果!

附录:

我们可以使用@CacheEvict注解来清除缓存,通常用在注入非数据查询(增加、删除等)业务方法上。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_21046965/article/details/100803786
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 17:51:59
  • 阅读 ( 1296 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢