我使用hazelcast名称空间和其中的地图定义了hazelcast实例。还使用spring cache abstraction来定义cacheManager。
<bean name="siteAdminPropertyPlaceHolderConfigurer"
class="org.sample.SiteAdminPropertyPlaceHolderConfigurer">
<property name="order" value="1000"/>
<!-- last one-->
</bean>
<!-- hazelcast cache manager -->
<hz:hazelcast id="instance" lazy-init="true">
<hz:config>
<hz:group name="${HAZEL_GROUP_NAME}" password="${HAZEL_GROUP_PASSWORD}"/>
<hz:network port="${HAZEL_NETWORK_PORT}" port-auto-increment="true">
<hz:join>
<hz:multicast enabled="${HAZEL_MULTICAST_ENABLED}"
multicast-group="224.2.2.3"
multicast-port="54327"/>
<hz:tcp-ip enabled="${HAZEL_TCP_ENABLED}">
<hz:members>${HAZEL_TCP_MEMBERS}</hz:members>
</hz:tcp-ip>
</hz:join>
</hz:network>
<hz:map name="oauthClientDetailsCache"
backup-count="1"
max-size="0"
eviction-percentage="30"
read-backup-data="true"
eviction-policy="NONE"
merge-policy="com.hazelcast.map.merge.PassThroughMergePolicy"/>
</hz:config>
</hz:hazelcast>
<bean id="hazelcastCacheManager" class="com.hazelcast.spring.cache.HazelcastCacheManager" lazy-init="true"
depends-on="instance">
<constructor-arg ref="instance"/>
</bean>
问题在于,这个spring上下文还用于我们除了服务器之外的其他工具,并且hazelcast开始监听端口并且工具实际上永远不会退出。 我试图禁用所有网络连接(enabled = false),我只是在服务器启动时以编程方式启用它们。但它不起作用hazelcast仍然开始。
我不想放弃弹簧名称空间,因为它非常方便开发人员定义新地图(弹簧缓存)。我也希望那里的榛子代码很少。
任何想法如何实现这一目标? 谢谢 施洛米
答案 0 :(得分:2)
除了在每个工具运行结束时告诉hazecast关闭之外,我没有办法做到这一点。
我还将上面的定义移到了分离的XML上下文文件中,因此工具不会加载它(至少不是所有这些文件) Hazelcase.shutdownAll();