springboot3+EhCache3缓存+JDK17整合指南

作者: ʘᴗʘ发布时间:2023-01-28 13:10 浏览量:2661 点赞:2221 售价: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

其它推荐:

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

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

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

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

  • 低成本反爬虫实战经验分享

    如何避免网站内容被爬虫恶意采集呢?本文通过介绍coderbbb一年以来和爬虫斗智斗勇的经历,启发你寻找适合自己的反爬虫方案!

  • springboot整合thymeleaf完成第一个HTML网页

    在当前的HTML网页开发中,虽然Vue、React等框架非常流行,但是因为部分行业、网站对搜索引擎SEO的需求,传统的模板引擎仍有一席之地。本文继续使用上文生成的Demo工程,通过引入thymeleaf来完成我们的第一个网页。

  • java实现62进制和10进制转换算法

    本文介绍如何使用java来实现62进制和10进制之间的转换,代码经过大量场景验证,可以直接复制使用。

  • Netty使用阿里云SSL证书配置SSL

    本文介绍了如何使用阿里云购买的SSL证书来配置Netty,使Netty支持SSL加密的TCP连接。由于直接从阿里云下载的证书文件无法使用,还需要通过OpenSSL做一些格式转换。转换好的pem和key文件,加载到netty的handler中即可完成netty的ssl升级

  • nginx配置http请求301跳转https

    本文介绍如何使用nginx,将域名的http请求301跳转到https地址上。全网最简单配置,直接复制即可使用。

  • 【性能提升100倍】springboot+thymeleaf缓存html网页提高并发性能

    本文介绍了springboot+thymeleaf技术栈下生成HTML页面缓存的方法,将整个HTML网页缓存在内存、硬盘中,极大的提升了Springboot开发的web网站的并发性能,实测性能提升100倍以上。

  • 【亲测有效】解决win10 git文件状态图标不显示的问题

    本文解决了win10系统下Git文件状态图标不显示的问题,并详细讲解了问题的根本原因。如果你也遇到了类似win10系统overplay icon图标不显示的问题,请参考本文解决。

  • 浏览器Web、小程序前端等直接上传图片文件到阿里云OSS(springboot版完整代码)

    本文详细介绍了如何通过HTML网页,直接上传图片等文件到阿里云OSS,不需要业务服务器中转文件,速度更快,更节省服务器带宽和流量。类似微信小程序、Vue、Element-UI等常见前端都可以使用本文介绍的WEB直传阿里云OSS技术快速完成文件上传。服务端代码使用Springboot演示。

user

ʘᴗʘ

77
文章数
73228
浏览量
57293
获赞数
67.80
总收入