【工作笔记】 - Hazelcast作为Mybatis二级缓存完全使用手册

Mybatis支持各种二级缓存实现,其中就包括Hazelcast. 我们都知道Hazelcast是一个分布式内存网格(In-Memory-Data-Grid), 但是大多数时候都被用做分布式缓存。

将Hazelcast作为Mybatis的二级缓存来使用时,将其配置为stand-alone的模式,即单节点,不尝试连接到任何集群。我们分为几个步骤来做。

第一步,引入Maven依赖:

  <dependency>
    <groupId>org.mybatis.caches</groupId>
    <artifactId>mybatis-hazelcast</artifactId>
    <version>1.1.2</version>
  </dependency>

引入这一个依赖就好,会自动关联依赖Hazelcast 3.7.2版本, 不需要自己再去引入其他版本的Hazelcast依赖,以免出现兼容问题。

第二步,在mapper文件中开启cache:

<mapper namespace="org.acme.FooMapper">

  <cache type="org.mybatis.caches.hazelcast.LoggingHazelcastCache"/>

  ...

</mapper>

这里社区给的参考是LoggingHazelcastCache, 也就是一个本地的hazelcast单节点,也可以使用LoggingHazelcastClientCache,就是一个本地的Hazelcast Client节点,可以连接到一个Hazelcast集群。

第三步,添加hazelcast的配置文件。

Mybatis会使用默认的hazelcast配置来启动hazelcast,但是还是建议自己添加一个配置文件,对hazelcast进行配置,如果使用的是LoggingHazelcastCache,则添加hazelcast.xml:

<?xml version="1.0" encoding="UTF-8"?>
<hazelcast xmlns="http://www.hazelcast.com/schema/config"
		   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		   xsi:schemaLocation="http://www.hazelcast.com/schema/config
		http://www.hazelcast.com/schema/config/hazelcast-config-3.12.xsd">
	<group>
		<name>hazelcast-server</name>
	</group>
	<network>
		<port auto-increment="false">5701</port>
		<join>
			<multicast enabled="false">
			</multicast>
			<tcp-ip enabled="false">
				<member-list>
					<member>127.0.0.1</member>
				</member-list>
			</tcp-ip>
		</join>
	</network>

</hazelcast>

如果使用的是LoggingHazelcastClientCache,则添加hazelcast-client.xml:

hazelcast-client:
  group:
    name: hazelcast-server
  network:
    cluster-members:
      - 127.0.0.1 
    smart-routing: true
    redo-operation: true
    connection-timeout: 5000
    connection-attempt-period: 1000
    connection-attempt-limit: 0
  properties: 
    hazelcast.client.invocation.timeout.seconds: 5
    hazelcast.client.heartbeat.interval: 5000
    hazelcast.client.heartbeat.timeout: 30000

这样mybatis的hazelcast二级缓存就已经开启了,不过此时还会有两个问题。

第一, 使用hazelcast作为二级缓存时,mapper中<cache>标签原先的eviction、flushInterval、size等等属性都不生效了,无法通过<cache>标签的配置来控制二级缓存的大小限制及生命周期,这里可以通过配置hazelcast.xml文件来达到相同效果。每一个mapper类名和在hazelcast中的map名一一对应,在hazelcast.xml文件中添加以下配置:

	<map name="com.chinaums.cache_bp.mapper.OnmiojiMapper">
		<max-size policy="PER_NODE">1000</max-size>
		<eviction-policy>LRU</eviction-policy>
		<time-to-live-seconds>10</time-to-live-seconds>
	</map>

即可完成对二级缓存的控制。

第二,如果使用的是springboot,那么在启动时springboot发现你依赖了hazelcast的jar包,会自动帮配置一个hazelcast实例的bean,你会发现你的hazelcast启动了两次,甚至形成了一个集群?这时可以关闭springboot原先的自动配置:

@SpringBootApplication(exclude = HazelcastAutoConfiguration.class)

将这一句加在application类上。

发布了42 篇原创文章 · 获赞 15 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览