编程语言
首页 > 编程语言> > java-使用Hazelcast作为第二级缓存的Spring Hibernate

java-使用Hazelcast作为第二级缓存的Spring Hibernate

作者:互联网

我有一个配置有Hibernate(休眠核心4.2.8)的spring项目(spring核心3.1.2),我想将Hazelcast设置为第二级缓存.我想让缓存以P2P,嵌入式集群模式分发(每个应用程序实例在同一台计算机上运行hazelcast实例).

这是我当前的sessionFactory配置.

        <bean id="sessionFactory"
          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" scope="singleton">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.myProject.beans" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.database">ORACLE</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <!--enable batch operations-->
                <prop key="hibernate.jdbc.batch_size">20</prop>
                <prop key="hibernate.order_inserts">true</prop>
                <prop key="hibernate.order_updates">true</prop>
                <!-- 2nd level cache configuration-->
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.cache.region.factory_class">com.hazelcast.hibernate.HazelcastLocalCacheRegionFactory</prop>
                <prop key="hibernate.cache.use_query_cache">false</prop>
            </props>
        </property>
    </bean>

当我运行一个小型测试来检查二级缓存命中时,此配置似乎可以在我的本地计算机上使用.

问题是:
为了使缓存在实例之间分布,我还必须进行其他哪些配置.不同的机器如何“互相了解”?
另外,是否有一种方法可以创建一个测试方案来检查缓存是否确实在几台机器之间分配?(例如:启动2个jvm)一个示例将不胜感激.

欢迎提供有关此配置的其他任何提示或警告.

免责声明:这是我第一次使用Hazelcast.

我的Hazelcast版本是3.5.4

谢谢!

解决方法:

您无需再进行配置即可形成集群.
只需启动您的应用程序的另一个实例,两个hazelcast实例应该可以看到彼此并形成一个集群.
默认情况下,hazelcast成员使用多播相互查找,当然,您可以通过向项目中添加自定义hazelcast.xml来更改此行为.

这是Spring-Hibernate-Hazelcast集成的详细示例.

https://github.com/hazelcast/hazelcast-code-samples/tree/master/hazelcast-integration/spring-hibernate-2ndlevel-cache

如果要使用Hazelcast配置播放,applicationContext-hazelcast.xml是要修改的文件.
例如,在此示例项目中,将port-auto-increment设置为false
这意味着如果指定端口已被占用,Hazelcast将无法启动. (默认为5701)

只需将此属性设置为true并启动另一个Application实例,您应该看到缓存已分发.

请不要在启动第一个实例之前注释掉Application类的最后一行,以使进程保持活动状态

像下面这样启动第一个实例;

public static void main(String[] args) {
    InitializeDB.start();

    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    DistributedMapDemonstrator distributedMapDemonstrator = context.getBean(DistributedMapDemonstrator.class);
    distributedMapDemonstrator.demonstrate();

    //Hazelcast.shutdownAll(); Keep instances alive to see form a cluster
}

第二个如下

public static void main(String[] args) {
    //InitializeDB.start(); DB will be initialized already by the first instance

    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    DistributedMapDemonstrator distributedMapDemonstrator = context.getBean(DistributedMapDemonstrator.class);
    distributedMapDemonstrator.demonstrate();

    //Hazelcast.shutdownAll(); Keep instances alive to see form a cluster

}

标签:caching,hibernate,hazelcast,spring,java
来源: https://codeday.me/bug/20191119/2034129.html