hibernate+jcache-outofmemoryerror

fhg3lkii  于 2021-07-14  发布在  Java
关注(0)|答案(0)|浏览(172)

我有一个多模块的应用程序。我将hibernate jcache添加到数据库模块中,以下是我的依赖项:

implementation "org.hibernate:hibernate-envers:$hibernateVersion"
    implementation "org.hibernate:hibernate-jcache:$hibernateVersion"
    implementation "org.ehcache:ehcache:$ehcacheVersion"

我的 ehcache.xml :

<service>
        <jcache:defaults enable-management="true" enable-statistics="true"/>
    </service>

    <cache-template name="defaultTemplate">
        <expiry>
            <ttl unit="seconds">1800</ttl>
        </expiry>
        <resources>
            <heap unit="entries">100000</heap>
        </resources>
    </cache-template>

    <cache alias="allowedCategory" uses-template="defaultTemplate"/>

以及 application.yml 与缓存相关的数据库模块属性:

hibernate:
        cache:
          region:
            factory_class: org.hibernate.cache.jcache.JCacheRegionFactory
          use_query_cache: true
          use_second_level_cache: true
        generate_statistics: true
        javax:
          cache:
            missing_cache_strategy: create
            provider: org.ehcache.jsr107.EhcacheCachingProvider
            uri: ${new org.springframework.core.io.ClassPathResource("/ehcache.xml").getURI().toString()}

我为每个实体添加了注解,并为数据库模块的配置类添加了@enablecaching:

@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "allowedCategory")

而且这些实体中的每一个都有uid字段,所以我在公共存储库类中的findbyuid方法上添加了查询提示注解 @QueryHints(value = @QueryHint(name = HINT_CACHEABLE, value = "true")) .
第二个模块是一个spring批处理应用程序,它处理大型csv文件,我没有改变这个模块,只有数据库。在没有缓存的情况下,应用程序处理文件的时间为5个小时,现在是这个时间的一半。但是现在我有一个问题,批量应用程序的集成测试不起作用,即使我添加了 application.properties 以下属性:

spring.jpa.properties.hibernate.cache.use_second_level_cache=false
spring.jpa.properties.hibernate.cache.use_query_cache=false
spring.cache.type=none

我有outofmemoryerror,因为 java.util.concurrent.ConcurrentHashMap$Node 元素,其数量在集成测试期间增长。我试着把ttl单位设置为1秒,但是没有用,所以我认为问题出在另一个地方。如何在测试期间禁用缓存,或者有更好的解决方案吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题