第一次写博客随笔:Mybatis整合Ehcache过程的简单描述
虽然之前一直都很想玩一玩自己的博客,但是一直懒得去钻研,也就不了了之了,现在想想有点后悔之前没有投身于对技术的研究了,现在开始虽说也不算太晚,但终究是损失了大把的时间,感慨也就说那么多吧!开始我的第一篇博客的技术内容吧!
今天我随笔想要讲解的内容是Mybatis整合三方二级缓存Ehcache的过程。
其实在我看来mybatis整合第三方的缓存是十分简单的,大致只需要三步:
1.导入jar包:Ehcache-core.jar mybatis-Ehcache.jar slf4j-api.jar (这里面有个小坑放在后面再说)
2.编写配置文件(这部基本可以在网上找到,直接复制粘贴即可)
具体配置内容(这步配置是在你自己工程中新建的.xml文件中配置的):
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="F:\Ehcache"/>
<defaultCache
maxElementsInMemory="1000"
maxElementsOnDisk="1000000"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="100"
timeToLiveSeconds="100"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
</defaultCache>
</ehcache>
以下是对其中每个量的含义的解释:
<!--
maxElementsInMemory:设置在内存中缓存对象的个数
maxElementsOnDisk :设置在硬盘中缓存对象个数
eternal:设置缓存是否永远不过期
overflowToDisk:当内存中缓存的对象个数超过maxElementsInMemory的时候,是否转移到硬盘
timeToIdleSeconds:当2次访问时间间隔超过该值时。将缓存对象失效
timeToLiveSeconds:一个缓存对象最多存放的时间(生命周期)
diskExpiryThreadIntervalSeconds:设置每隔多长时间,通过有个线程来清理硬盘中的缓存
memoryStoreEvictionPolicy:当超过缓存对象最大值时,处理策略:LRU,FIFO,LFU
-->
接着你需要到相应的XXXmapper.xml文件中写出如下配置:(其中属性标签的内容是可写可不写的,因为在之前的配置中已经有设置全局变量,即默认值)
<cache type="org.mybatis.caches.ehcache.EhcacheCache">
<property name="maxElementsInMemory" value="2000"/>
<property name="maxElementsOnDisk" value="3000"/>
</cache>
3.开启cache二级缓存(在config.xml中)
再在config.xml文件中导入相应的配置
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
到达这一步你就可以运行你所写的程序测试是否成功整合上了相应的cache了,这时候就到我之前提到的一个小坑的地方了,在你运行时可能会出现如下错误:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
观察日志中的错误内容,可以发现应该是jar包的问题,未能成功加载类"org.slf4j.impl.StaticLoggerBinder",这说明单单一个slf4j-api.jar是不够的,那么这时候我们可以看看我们所下载的mybatis的jar包里自带的包有哪一个和SLF4J是相关的,最后应该可以发现,还有一个slf4j-log4j12-1.7.25.jar的jar包貌似和其相关,尝试导包,最后发现果然问题就解决了,在做框架方面的学习是有很多和导包相关的错误,只要熟悉了这些套路,就很容易找到相应的解决方案,对比起最初一个bug改半天都改不好的时候,错的次数多了,看到这种bug已经毫无波澜了,我觉得学习技术就是要多多练习,不要怕有错误,多错多练!这也是对我自己这段时间学习的一个勉励吧!希望后来的我能够看到自己的进步吧!