springboot 缓存ehcache的简单使用

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

步骤:

1. pom文件中加 maven jar包:

 

 <!-- ehcache 缓存 --><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId></dependency>

 

 <!--开启缓存支持--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>

 

2. 新增一个配置文件 ehcache.xml,放在resource 下面,springboot会自动扫描 :

 

<?xml version="1.0" encoding="UTF-8"?>
<ehcache><!--ehcache 缓存--><cache name="department" maxElementsInMemory="1000" />
</ehcache>

更多配置参考:

<ehcache><!--ehcache 缓存--><cache name="department"maxElementsInMemory="100000"eternal="true"overflowToDisk="true"maxElementsOnDisk="10000000"diskPersistent="true"memoryStoreEvictionPolicy="LRU"/><defaultCacheeternal="false"maxElementsInMemory="10000"overflowToDisk="false"diskPersistent="false"timeToIdleSeconds="0"timeToLiveSeconds="600"memoryStoreEvictionPolicy="LRU"/></ehcache>

 

3.  在 main 方法上加上注解 @EnableCaching,开启缓存的使用:

@EnableCaching // 开启缓存使用
@SpringBootApplication
public class Application { // extends SpringBootServletInitializerpublic static void main(String[] args) {SpringApplication application = new SpringApplication(Application.class, "classpath*:/spring/security-*.xml");application.setWebEnvironment(true);application.run(args);}/***  HOW TO MAKE A SPRING BOOT JAR INTO A WAR TO DEPLOY ON TOMCAT*/
//	@Override
//	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
//		// Customize the application or call application.sources(...) to add sources
//
//		application.sources(Application.class);
//		return application;
//	}}

4. 在方法中运用注解,实现缓存的 增、删、改、查

 

只要在方法上加上对应注解就可以了。

@Cacheable 查: 如果有就直接缓存中取 没有就数据库查并放入缓存。加上这个注解,调用这个方法就可以取到缓存中的值。

@CacheEvict 新增、删除、修改 :会自动清除缓存中内容。加上这注解,对数据库的update、add、delete操作都会清除对应缓存。

 

如:缓存名为“ department ”,当调用此方法时会先判断是否有缓存。有则不进入方法,直接返回缓存中的值。无缓存名为 “department” 的缓存才会进入方法内部,执行数据库查询。

    @Override@Cacheable(value = "department")public List<Department> getDepartmentList() {System.out.println("--------------------------------缓存查询:查查查-树树树\n");List<Department> departmentList = departmentRepository.findAll(new Sort(Sort.Direction.ASC, "id"));return (List<Department>) buildDepartmentTree(departmentList, null);}

 

可以给缓存中的具体项起个键值:key

  @Override@Cacheable(value = "department", key = "#departmentId")public Object findOne(String departmentId) {return departmentRepository.findOne(departmentId);}

 

当缓存key没有全部命中时,要确保缓存全部清除,就要加上

 allEntries = true ,默认为false 
  @Override@Transactional(readOnly = false)@CacheEvict(value = "department", allEntries = true) // 新增、删除、修改 all is it.public Object updateDepartmentById(String id, Department departmentDto) {Department department = departmentRepository.findOne(id);if (department == null) {return "不存在该部门";}BeanHelper.mapPartOverrider(department, departmentDto);departmentRepository.save(department);return department;}

 

 

 

spring提供了4个注解来声明缓存规则(又是使用注解式的AOP的一个生动例子),如表。

这里写图片描述

 

事实上,新增、删除、修改都可以用@CacheEvict ,不建议使用 @ CachePut ,用法完全如上查的方法,只是注解名字不一样。

 

// 查:存key为cache_department 的数据缓存到departmentList中,如果没有指定key则方法参数作为key保存到缓存中。department只是缓存的名字。
//不指定 key 会默认使用参数名或者方法名,作为缓存的key。

 

 

 

5. 测试

第一次访问是没有缓存的,执行sql从数据库查,执行了查询方法,输出写在方法中的输出语句。

 

 

 

第二次访问,已有缓存,不进入方法,直接从缓存得数据并作为方法的返回值,不运行sql。如下:

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue学习:7、路由跳转

2019独角兽企业重金招聘Python工程师标准>>> <body><div id"app"></div></body><script type"text/javascript">var Login {template: <div>我是登陆界面</div>};var Register {template: <div…

Spring Retry 重试机制实现及原理

概要 Spring实现了一套重试机制&#xff0c;功能简单实用。Spring Retry是从Spring Batch独立出来的一个功能&#xff0c;已经广泛应用于Spring Batch,Spring Integration, Spring for Apache Hadoop等Spring项目。本文将讲述如何使用Spring Retry及其实现原理。 背景 重试&…

golang学习之旅(1)

这段时间我开始了golang语言学习&#xff0c;其实也是为了个人的职业发展的拓展和衍生&#xff0c;语言只是工具&#xff0c;但是每个语言由于各自的特点和优势&#xff0c;golang对于当前编程语言的环境&#xff0c;是相对比较新的语言&#xff0c;对于区块链&#xff0c;大数…

数据库中Schema(模式)概念的理解

在学习SQL的过程中&#xff0c;会遇到一个让你迷糊的Schema的概念。实际上&#xff0c;schema就是数据库对象的集合&#xff0c;这个集合包含了各种对象如&#xff1a;表、视图、存储过程、索引等。为了区分不同的集合&#xff0c;就需要给不同的集合起不同的名字&#xff0c;默…

golang学习之旅(2)- go的数据基本数据类型及变量定义方式

叮铃铃&#xff0c;这不有人在评论问下一篇何时更新&#xff0c;这不就来了嘛&#xff0c;&#x1f604; 今天我们说说golang 的基本数据类型 基本类型如下&#xff1a; //基本类型 布尔类型&#xff1a;bool 即true 、flase 类似于java中的boolean 字符类型&#xff1a;s…

开发优秀产品的六大秘诀

摘要&#xff1a;本文是Totango的联合创始人兼公司CEO Guy Nirpaz发表在Mashable.com上的文章。无论是在哪个行业&#xff0c;用户永远是一款产品的中心&#xff0c;本文作者就以用户为中心&#xff0c;为大家讲述了六个如何为企业产品添加功能的秘诀。 随着云计算的发展&#…

Spring Boot下无法加载主类 org.apache.maven.wrapper.MavenWrapperMain问题解决

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 引言&#xff1a; 在SpringBoot中需要使用mvnw来做相关操作&#xff0c;但是却有时候会报出达不到MavenWrapperMain的错误信息&#xff…

SpringBoot与SpringCloud的版本说明及对应关系

转载原文地址&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

优秀产品页设计:将访问者转化成客户

摘要&#xff1a;本文是对外文《 Better Product Pages: Turn Visitors Into Customers 》的翻译&#xff0c;编译内容如下&#xff1a; 展示产品、服务的方法是其获得成功的关键。在Web上&#xff0c;你留给用户的第一印象是至关重要的。 如果有人访问你的网站&#xff0c;一定…

Coding For Fun 32小时:充满创造、激情、团结的编程马拉松

摘要&#xff1a;Coding for Fun大赛是2012中国软件开发者大会&#xff08;SDCC&#xff09;的重要环节。由六名黑马学员组成的“天翼二队”&#xff0c;经过32小时的“血拼”&#xff0c;凭大赛作品“语音控”&#xff0c;获得了本次大赛的“最佳设计奖”。本文是该队队员的参…

centos6.8安装oracle12C 详细步骤讲解

2019独角兽企业重金招聘Python工程师标准>>> centos6.8安装oracle12C 详细步骤讲解 安装前环境配置 1 root身份安装依赖包 [rootdlp ~]# yum -y install binutils compat-libcap1 compat-libstdc-33 compat-libstdc-33.i686 gcc gcc-c glibc glibc.i686 glibc-deve…

Linux在超级计算机领域一统天下

摘要&#xff1a;在世界超级计算机排行榜500强榜单中&#xff0c;基于Linux的超级计算机占据了462个席位&#xff0c;比率高达92%。基于Windows的超级计算机仅有2个席位&#xff0c;份额为0.4%。中国基于Windows的超级计算机Magic Cube排名94位&#xff0c;澳大利亚基于Windows…

Koa项目搭建过程详细记录

2019独角兽企业重金招聘Python工程师标准>>> Java中的Spring MVC加MyBatis基本上已成为Java Web的标配。Node JS上对应的有Koa、Express、Mongoose、Sequelize等。Koa一定程度上可以说是Express的升级版。许多Node JS项目已开始使用非关系型数据库(MongoDB)。Sequel…

Equation漏洞混淆利用分析总结(下)

样本三 如下所示在该样本中&#xff0c;使用了Ole10Native的流&#xff0c;因此没有equative head&#xff0c;默认读取红框中的4位长度。之后的metf head为01. 可以看到metf head的长度为01时&#xff0c;直接进入到if判断中(该if中的函数实际是一个异常处理函数&#xff0c;但…

5 个常用的软件质量指标

在软件开发中&#xff0c;软件质量是衡量软件是否符合需求、标准的重要体现。除了 代码质量外&#xff0c;影响软件整体质量的因素还有很多。因此&#xff0c;要确保软件的整体质量&#xff0c;就需要在各个环节严格控制。本文列出了衡量软件质量的5个最常用的指标。1. SLOC&a…

介绍一个对陌生程序快速进行性能瓶颈分析的技巧

前言 工作多年&#xff0c;一直做的是curd系统。前几年做的系统应用场景&#xff0c;大多对数据库依赖比较重。例如报表统计&#xff0c;数据迁移&#xff0c;批量对账等。所以这些系统出现性能瓶颈一般出在数据库操作上面。 如果程序因为数据库操作出现性能瓶颈是比较好办的&a…

掌握穷变富的12条原则 迅速从普通人变成有钱人

“穷忙”和“富闲”是对立面&#xff0c;“穷”对“忙”&#xff0c;“富”对“闲”&#xff0c;很多“穷忙女”是在拿青春当赌注&#xff0c;希望自己今天的“美丽”明天就能在市场上有个不错的“回报”&#xff1b;而多数“富闲女”则是在拿智慧当筹码&#xff0c;既不可替代…

windows下安装和设置gradle

一、安装前检查 检查jdk是否已经安装 二、下载gradle 1. https://gradle.org/releases/ 2.设置gradle环境变量 3. 环境变量中增加名为GRADLE_HOME的变量名,值为Gralde的解压路径,例如D:\Gradle 在path的后追加%GRADLE_HOME%\bin; 4. 验证 5.修改默认缓存目录 修改Gradle默认缓存…

赚大钱一定要选择

赚大钱一定要选择 八大赚钱定律让你赚翻天 许多人看起来已经步入小康了&#xff0c;但他们还说不上是真正的富人&#xff0c;从科学理财的观念看&#xff0c;凭高收入和攒钱来实现富裕的思路完全是错误的&#xff0c;依靠攒钱&#xff0c;不仅多数人无法获得最终的财务自由&…

深解微服务架构:从过去,到未来

http://www.uml.org.cn/zjjs/im... 微服务的诞生 微服务架构&#xff08;MicroserviceArchitect&#xff09;是一种架构模式&#xff0c;它提倡将单块架构的应用划分成一组小的服务&#xff0c;服务之间互相协调、互相配合&#xff0c;为用户提供最终价值。每个服务运行在其独立…