我正在尝试在客户端服务器模式下使用 hazelcast 来启用 Hibernate 二级缓存。 但是当我运行应用程序时,我得到了这个异常
Caused by: java.lang.ClassNotFoundException: Could not load requested class : com.hazelcast.client.cache.impl.HazelcastClientCachingProvider
at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:210)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:130)
... 49 common frames omitted
这是我的休眠配置
jpa:
default:
properties:
hibernate:
cache:
use_query_cache: false
use_second_level_cache: true
region:
factory_class: com.hazelcast.client.cache.HazelcastClientCachingProvider
[更新] 这是我的 build.gradle
plugins {
id("io.micronaut.application") version "$micronautAppVersion"
id("com.google.cloud.tools.jib") version "$googleJibVersion"
id "jacoco"
}
version = "0.1"
micronaut {
runtime("netty")
testRuntime("junit5")
processing {
incremental(true)
annotations("com.test")
}
}
dependencies {
annotationProcessor "io.micronaut.data:micronaut-data-processor"
annotationProcessor "io.micronaut:micronaut-http-validation"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
annotationProcessor "io.micronaut.openapi:micronaut-openapi"
implementation "javax.inject:javax.inject"
implementation "io.micronaut:micronaut-http-client"
implementation "io.micronaut:micronaut-runtime"
implementation "io.micronaut.data:micronaut-data-hibernate-jpa"
implementation "io.micronaut.sql:micronaut-hibernate-jpa"
implementation "io.micronaut:micronaut-validation"
implementation "javax.annotation:javax.annotation-api"
implementation("javax.inject:javax.inject:1")
implementation('io.micronaut.cache:micronaut-cache-hazelcast')
runtimeOnly "io.micronaut.sql:micronaut-jdbc-hikari"
}
HazelcastClientCachingProvider
是一个客户端,这意味着它没有自己的任何缓存,只能与另一个缓存服务器通信(实际上,建议使用jcache
作为标准Java缓存API,而不是特定于提供者的客户)。
Micronaut 不会通过包含依赖项来自动启动缓存服务器。你必须像这样配置它
或者,您可以直接使用 hibernate 配置来配置嵌入式缓存:
hibernate:
cache:
region:
factory_class: jcache
javax:
cache:
provider: com.hazelcast.cache.impl.HazelcastServerCachingProvider
uri: <HazelcastConfig.xml>