第四节 整合EHCache
1、EHCache简介
2、整合操作
①Mybatis环境
②添加依赖
[1]依赖信息
③整合EHCache
[1]创建EHCache配置文件
[2]指定缓存管理器的具体类型
④加入log4j适配器依赖
⑤junit测试
⑥EHCache配置文件说明
3、日志框架简介
① 日志框架类型
② 日志框架类型
③ logback的使用
[1] 依赖信息
[2] 配置信息

第四节 整合EHCache

1、EHCache简介

官网地址:https://www.ehcache.org/
04.整合EHCache - 图1

Ehcache is an open source, standards-based cache that boosts performance, offloads your database, and simplifies scalability. It’s the most widely-used Java-based cache because it’s robust, proven, full-featured, and integrates with other popular libraries and frameworks. Ehcache scales from in-process caching, all the way to mixed in-process/out-of-process deployments with terabyte-sized caches.
Ehcache是一种开源的、基于标准的缓存,它可以提高性能、减轻数据库负担并简化可伸缩性。它是使用最广泛的基于Java的缓存,因为它健壮、可靠、功能齐全,并与其他流行的库和框架集成。Ehcache可以从进程内缓存扩展到进程内/进程外混合部署和TB大小的缓存。

2、整合操作

①Mybatis环境

在Mybatis环境下整合EHCache,前提当然是要先准备好Mybatis的环境。

②添加依赖

[1]依赖信息



org.mybatis.caches
mybatis-ehcache
1.2.1

③整合EHCache

[1]创建EHCache配置文件

在resources下创建配置文件:ehcache.xml。文件内容:
<?xml version=”1.0” encoding=”utf-8” ?>
xsi:noNamespaceSchemaLocation=”../config/ehcache.xsd”>

  1. <defaultCache<br /> maxElementsInMemory="1000"<br /> maxElementsOnDisk="10000000"<br /> eternal="false"<br /> overflowToDisk="true"<br /> timeToIdleSeconds="120"<br /> timeToLiveSeconds="120"<br /> diskExpiryThreadIntervalSeconds="120"<br /> memoryStoreEvictionPolicy="LRU"><br /> </defaultCache><br /></ehcache><br />引入第三方框架或工具时,配置文件的文件名可以自定义吗?
  • 可以自定义:文件名是由我告诉其他环境
  • 不能自定义:文件名是框架内置的、约定好的,就不能自定义,以避免框架无法加载这个文件

[2]指定缓存管理器的具体类型

还是到查询操作所的Mapper配置文件中,找到之前设置的cache标签:
04.整合EHCache - 图2

④加入log4j适配器依赖

存在SLF4J时,是无法直接访问log4j的,需要加入一个适配器类:slf4j-log4j12。


org.slf4j
slf4j-log4j12
1.7.30
test

⑤junit测试

正常按照二级缓存的方式测试即可。因为整合EHCache后,其实就是使用EHCache代替了Mybatis自带的二级缓存。

⑥EHCache配置文件说明

当借助CacheManager.add(“缓存名称”)创建Cache时,EhCache便会采用指定的的管理策略。
defaultCache标签各属性说明:

属性名 是否必须 作用
maxElementsInMemory 在内存中缓存的element的最大数目
maxElementsOnDisk 在磁盘上缓存的element的最大数目,若是0表示无穷大
eternal 设定缓存的elements是否永远不过期。
如果为true,则缓存的数据始终有效,
如果为false那么还要根据timeToIdleSeconds、timeToLiveSeconds判断
overflowToDisk 设定当内存缓存溢出的时候是否将过期的element缓存到磁盘上
timeToIdleSeconds 当缓存在EhCache中的数据前后两次访问的时间超过timeToIdleSeconds的属性取值时,
这些数据便会删除,默认值是0,也就是可闲置时间无穷大
timeToLiveSeconds 缓存element的有效生命期,默认是0.,也就是element存活时间无穷大
diskSpoolBufferSizeMB DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区
diskPersistent 在VM重启的时候是否启用磁盘保存EhCache中的数据,默认是false。
diskExpiryThreadIntervalSeconds 磁盘缓存的清理线程运行间隔,默认是120秒。每个120s,
相应的线程会进行一次EhCache中数据的清理工作
memoryStoreEvictionPolicy 当内存缓存达到最大,有新的element加入的时候, 移除缓存中element的策略。
默认是LRU(最近最少使用),可选的有LFU(最不常使用)和FIFO(先进先出)

3、日志框架简介

① 日志框架类型

情况1:如果开发项目中已经确定采用哪种具体日志系统,直接使用即可。
04.整合EHCache - 图3

  • log4j:日志框架的鼻祖,作者Ceki Gülcü将其捐献给Apache开源,吸引了无数的人无偿帮助测试它,扩展它,改进它,很快就成了最流行的日志工具。
  • JDK logging:从JDK1.4开始,JDK中提供了java.util.logging包,也来记录日志。这可是官网日志包,而不是第三方日志包,但是已经无法撼动log4j了。
  • log4j2:2015年9月,Apache软件基金业宣布,Log4j不在维护,建议所有相关项目升级到Log4j2。log4j2性能优异。但内部实现和log4j完全不同

情况2:面对着众多的日志框架,到底该选择哪一个?Java访问数据库也有同样的烦恼,后来推出JDBC API,面向接口编程,运行时调用具体的数据库驱动jar。SLF4j就是这个抽象的日志框架。

  • SLF4j:由log4j的作者设计完成的,简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,而是通过Facade Pattern提供一些Java logging API,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。作者创建SLF4J的目的是为了替代Jakarta Commons-Logging。
  • Jakarta Commons-Logging,现在叫Apache Commons-Logging,也是一个日志门面,希望解决的问题和Slf4j类似。common-logging通过动态查找的机制,在程序运行时自动找出真正使用的日志库; slf4j在编译时静态绑定真正的Log库。
  • logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,并给出了slf4j的原生实现(即直接实现了slf4j的接口,而log4j因为出现早于slf4j,并没有直接实现,就需要一个适配器slf4j-log4j12.jar)。

04.整合EHCache - 图4

下面是来自slf官网的更专业的日志协作图。http://www.slf4j.org/manual.html
04.整合EHCache - 图5

② 日志框架类型

门面:

名称 说明
JCL(Jakarta Commons Logging) 陈旧
SLF4J(Simple Logging Facade for Java)★ 适合
jboss-logging 特殊专业领域使用

实现:

名称 说明
log4j★ 最初版
JUL(java.util.logging) JDK自带
log4j2 Apache收购log4j后全面重构,内部实现和log4j完全不同
logback★ 优雅、强大

注:标记★的技术是同一作者。

③ logback的使用

[1] 依赖信息



ch.qos.logback
logback-classic
1.2.3

[2] 配置信息

<?xml version=”1.0” encoding=”UTF-8”?>


class=”ch.qos.logback.core.ConsoleAppender”>



[%d{HH:mm:ss.SSS}] [%-5level] [%thread] [%logger] [%msg]%n

  1. <!-- 设置全局日志级别。日志级别按顺序分别是:DEBUG、INFO、WARN、ERROR --><br /> <!-- 指定任何一个日志级别都只打印当前级别和后面级别的日志。 --><br /> <root level="DEBUG"><br /> <!-- 指定打印日志的appender,这里通过“STDOUT”引用了前面配置的appender --><br /> <appender-ref ref="STDOUT" /><br /> </root>
  2. <!-- 根据特殊需求指定局部日志级别 --><br /> <logger name="com.atguigu.crowd.mapper" level="DEBUG"/>

上一节 回目录 下一节