springboot 整合EHcache实现缓存技术

tech2025-02-28  8

一.新建项目配置pom文件

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> <!-- springBoot的启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- springBoot的thymeleaf启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- springBoot的jpa启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 测试工具的启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- druid连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency> <!-- Spring Boot缓存支持启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <!-- Ehcache坐标 --> <dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> <version>3.1.2</version> </dependency>

二.dao层

package com.ljf.spring.boot.demo.dao; import com.ljf.spring.boot.demo.model.Users; import org.springframework.data.jpa.repository.JpaRepository; /** * 参数一 T :当前需要映射的实体 * 参数二 ID :当前映射的实体中的OID的类型 * */ public interface UserRepository extends JpaRepository<Users,Integer> { }

三.model层

 注意users要实现序列化

package com.ljf.spring.boot.demo.model; import javax.persistence.*; import java.io.Serializable; /** * @ClassName: Users * @Description: TODO * @Author: liujianfu * @Date: 2020/09/02 08:50:18  * @Version: V1.0 **/ @Entity @Table(name="tb_users_tb") public class Users implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; @Column(name = "name") private String name; @Column(name = "age") private Integer age; @Column(name = "address") private String address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Users [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]"; } }

 四.service层

public interface UserService { List<Users> findUserAll(); } package com.ljf.spring.boot.demo.service.impl; import com.ljf.spring.boot.demo.dao.UserRepository; import com.ljf.spring.boot.demo.model.Users; import com.ljf.spring.boot.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.List; /** * @ClassName: UserServiceImpl * @Description: TODO * @Author: liujianfu * @Date: 2020/09/02 08:57:11  * @Version: V1.0 **/ @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override //@Cacheable 对当前的对象做缓存处理 //@Cacheable(value = "users") public List<Users> findUserAll() { return this.userRepository.findAll(); } }

五.配置文件

5.1 application配置文件

spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test_db spring.datasource.username=root spring.datasource.password=root spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.cache.ehcache.cofnig=ehcache.xml

5.2 ehcache.xml配置文件

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> <diskStore path="java.io.tmpdir"/> <!--defaultCache:echcache的默认缓存策略 --> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> <persistence strategy="localTempSwap"/> </defaultCache> <!-- 自定义缓存策略 --> <cache name="users" maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> <persistence strategy="localTempSwap"/> </cache> </ehcache>

六 启动类和测试类

package com.ljf.spring.boot.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; /** * Hello world! * */ @SpringBootApplication @EnableCaching public class StartApp { public static void main( String[] args ) { SpringApplication.run(StartApp.class, args); System.out.println( "Hello World!" ); } } package com.ljf.spring.boot.demo; import static org.junit.Assert.assertTrue; import com.ljf.spring.boot.demo.model.Users; import com.ljf.spring.boot.demo.service.UserService; 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 java.util.List; /** * Unit test for simple App. */ @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes={StartApp.class}) //springboot的启动类 public class AppTest { @Autowired private UserService us; /** * Rigorous Test :-) */ @Test public void query(){ List<Users> list=us.findUserAll(); System.out.println("第一次:"+list.get(0).getAddress()); List<Users> list2=us.findUserAll(); System.out.println("第2次:"+list2.get(0).getAddress()); } }

 七.不加缓存执行

八.开启缓存执行

通过console打印的日志可以看到:只打印了一次数据库的日志,查询了一次数据库。

 

 

 

 

 

 

最新回复(0)