springboot3+EhCache3缓存+JDK17整合指南

作者: ʘᴗʘ发布时间:2023-01-28 13:10 浏览量:2380 点赞:2015 售价:0

背景

最近把本站的JDK版本从11升级到了17,springboot也升级到了3。之前coderbbb使用的是EhCache2+Springboot2的方案,所以需要升级到EhCache3+Springboot3。

首先,要明确一点,就是EhCache2和EhCache3可以说是完全不同的两个框架了。EhCache2有自己的一套缓存标准API,springboot2的cache部分整合了该API。但是到了EhCache3,并没有自己的API,而是实现了JCache。springboot3中,也不再有EhCacheCacheManager这个可以自动注入的类了。

综上所述,EhCache3和Springboot3的搭配使用,和之前有很大区别。本文将详细介绍具体整合步骤。

整合

下载依赖包

<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>3.10.8</version>
</dependency>
<dependency>
    <groupId>javax.cache</groupId>
    <artifactId>cache-api</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0.1</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.1</version>
</dependency>

第一个依赖包是EhCache3的依赖包,后面的几个主要是用于解析EhCache3的xml配置文件的。具体每个依赖的最新版本和作用,后面作者再更新。

appliaction.properties配置

第二步需要在springboot的application.properties中配置springboot cache选用哪种缓存实现(比如redis、jcache等等),以及配置文件位置。

spring.cache.type=jcache
spring.cache.jcache.config=classpath:ehcache3.xml #这个文件名可以自己定义

这里需要注意的是,缓存类型不再是EhCache了,EhCache3是实现JCache的一种缓存。

Ehcache3的xml文件配置

该配置文件比较简单,虽然和Ehcache2的配置文件完全不同,但参考代码中的注释,应该可以看懂。

<config xmlns='http://www.ehcache.org/v3'>
    <!-- 持久化 路径 -->
    <persistence directory="./tmp/Ehcache3"/>

    <!-- 缓存模版,此处为了显示其用法,也可以不用模版直接在cache中配置与模版参数相同 -->
    <cache-template name="oneHourTemplate">
<!--        <key-type>java.lang.String</key-type>-->
<!--        <value-type>java.lang.String</value-type>-->
        <expiry>
            <!-- 单位默认为秒当用秒作单位时,可以不填-->
            <ttl unit="hours">1</ttl>
        </expiry>
        <resources>
            <!-- 单位默认为entries当用entries作单位时,可以不填-->
            <heap>100</heap>
            <offheap unit="MB">5</offheap>
            <!-- persistent 默认为false可以不填-->
            <disk unit="MB">1024</disk>
        </resources>
    </cache-template>

    <cache-template name="tenMinutesTemplate">
<!--        <key-type>java.lang.String</key-type>-->
<!--        <value-type>java.lang.String</value-type>-->
        <expiry>
            <!-- 单位默认为秒当用秒作单位时,可以不填-->
            <ttl unit="minutes">10</ttl>
        </expiry>
        <resources>
            <!-- 单位默认为entries当用entries作单位时,可以不填-->
            <heap>100</heap>
            <offheap unit="MB">5</offheap>
            <!-- persistent 默认为false可以不填-->
            <disk unit="MB">1024</disk>
        </resources>
    </cache-template>

    <!-- 缓存对象,如果使用了模版会覆盖模版中的内容,使用uses-template=""来引用模版 -->
    <cache alias="indexArticleList" uses-template="oneHourTemplate">
<!--        <key-type>java.lang.Integer</key-type>-->
<!--        <value-type>com.github.pagehelper.PageInfo</value-type>-->
<!--        <expiry>-->
<!--            <!–此处会覆盖模版中的(TTL)配置 –>-->
<!--            <tti>60</tti>-->
<!--        </expiry>-->
<!--        <resources>-->
<!--            <disk unit="MB" persistent="true"> 500</disk>-->
<!--        </resources>-->
        <!-- 没有研究这块,暂时先不管
        <eviction-advisor></eviction-advisor>
        -->
    </cache>

    <cache alias="articleDetailsBig" uses-template="oneHourTemplate">
<!--        <key-type>java.lang.Long</key-type>-->
<!--        <value-type>com.coderbbb.blogv2.database.dto.WebsiteArticleDTO</value-type>-->
    </cache>
    <cache alias="cacheHtml" uses-template="oneHourTemplate" />
    <cache alias="articleDo" uses-template="tenMinutesTemplate">
<!--        <key-type>java.lang.Long</key-type>-->
<!--        <value-type>com.coderbbb.blogv2.database.dos.ArticleDO</value-type>-->
    </cache>
    <cache alias="articleKeywords" uses-template="oneHourTemplate">
<!--        <key-type>java.lang.Long</key-type>-->
<!--        <value-type>java.lang.String</value-type>-->
    </cache>
    <cache alias="websiteConfig" uses-template="oneHourTemplate">
<!--        <key-type>java.lang.String</key-type>-->
<!--        <value-type>com.coderbbb.blogv2.database.dos.WebsiteConfigDO</value-type>-->
    </cache>
    <cache alias="randomArticle" uses-template="oneHourTemplate">
<!--        <key-type>java.lang.Long</key-type>-->
<!--        <value-type>java.util.List</value-type>-->
    </cache>
    <cache alias="cacheUserAgent" uses-template="tenMinutesTemplate">
<!--        <key-type>java.lang.String</key-type>-->
<!--        <value-type>java.lang.Boolean</value-type>-->
    </cache>
    <cache alias="authorInfo" uses-template="oneHourTemplate" />
    <cache alias="relationArticleInfo" uses-template="oneHourTemplate" />
    <cache alias="userAnaData" uses-template="tenMinutesTemplate" />
    <cache alias="userCache" uses-template="tenMinutesTemplate" />
    <cache alias="indexTag" uses-template="oneHourTemplate" />
    <cache alias="hotArticle" uses-template="oneHourTemplate" />
    <cache alias="recentArticle" uses-template="oneHourTemplate" />
    <cache alias="hotBook" uses-template="oneHourTemplate" />


</config>

开始在springboot3中使用EhCache3

这一步和之前是一样的,通过springboot中的@Cacheable等注解,正常使用缓存即可。

运行截图

整合成功后,EhCache3的日志输出是远远多于EhCache2的。如下图所示,已经可以正常使用EhCache3啦!

springboot3+EhCache3缓存+JDK17整合指南

版权声明:《springboot3+EhCache3缓存+JDK17整合指南》为CoderBBB作者「ʘᴗʘ」的原创文章,转载请附上原文出处链接及本声明。

原文链接:https://www.coderbbb.com/articles/71

其它推荐:

  • springboot使用redis限制并发请求、限流

    日常开发中经常会遇到需要限流、限制并发的需求,网上有很多算法、框架的介绍,但通常比较复杂,对于小项目来讲过于复杂。本文介绍了一种通过redis incr函数来实现的简便限流算法,并提供了完整源代码,可以快速的整合到你的项目中,实现API限流。

  • 【终极方案】java通过Selenium调用chrome实现html转图片

    本文介绍了HTML转图片的常用技术和方案,并提出了各个方案的缺点。最后给出了基于selenium和chrome的完美解决方案。使用该方案,可以完美的转化各种HTML、CSS、JS,只要chrome能正常展示的,就能正常截图!

  • 【thymeleaf文档精华版】springboot thymeleaf常用语法中文教程

    现在虽然Vue、React等前端框架盛行,但是部分需要SEO的页面,还是得用thymeleaf之类的模板引擎来渲染。thymeleaf的官方文档,写的太过详细,显得比较啰嗦。本文主要是把thymeleaf官方的英文文档,结合作者自己的使用经验,整理成了一篇可以用来速查的中文教程,方便大家。

  • cookie一段时间免登录、登录保持设计思路

    本文介绍了如何通过cookie实现常见的网站登录保持、免登录。详细讲解了cookie在日常使用中的一些安全问题,并逐一提供了解决方案。按照本文的思路和步骤,可以方便的实现一个最基础的cookie免登录机制。

  • 微软win10官方高清桌面壁纸自动更换软件

    Bing Wallpaper壁纸软件号称:“通过一张照片探索世界”。强烈推荐使用这款微软官方Win10壁纸软件,可以自动更换壁纸。所有的壁纸都是世界各地景色的高清大图,适合喜欢简洁、清爽的朋友。

  • java数组和List互相转化的最佳办法

    本文介绍了java代码中如何快速互相转换java list和java array。根据本教程介绍的方法,一行代码即可实现java list和array的互相转化。

  • springboot @Async使用自定义线程池和线程池参数调优经验

    在springboot中使用@Async注解时,如果需要指定@Async使用的线程池,可以参照本文介绍的方法完成配置,过程十分简便。

  • springboot整合mybatis查询mysql数据库教程

    本文介绍如何在springboot中整合mybatis来查询mysql数据库,包括各种join查询、主键自动生成、复杂resultMap映射、in查询等,通过阅读本文可以掌握springboot+mybatis的常用各种语法。

  • java模拟登录TpLink路由器,获取连接WIFI的设备列表

    本文通过Java代码实现了模拟登录TpLink路由器后台,并抓取连接路由器的所有WIFI设备列表。

  • 解析CSDN“登录后才能复制”功能技术原理

    本文是作者遇到CSDN“复制代码必须登录”的功能后,进行的一次技术探索,研究了CSDN是如何实现文章“防复制”的,并给出了更加安全牢固的反爬虫、反复制方案。

user

ʘᴗʘ

77
文章数
70138
浏览量
55468
获赞数
67.80
总收入