You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redis缓存启动报错:ClassNotFoundException: [Lxyz.property.model.CouncilTax;

问题

我有一个基于Quarkus框架、使用Redis缓存的方法,代码如下:

@CacheResult(cacheName = "council-tax-bands-by-postcode")
@Query("searchCouncilTaxBandByPostcode")
@Blocking
public Uni<CouncilTax[]> searchByPostcode(CouncilTaxSearchCriteria searchCriteria) {
    log.infof("Searching council tax bands for postcode: %s", searchCriteria.getPostcode());
    return scraper.getByPostcode(searchCriteria).memoize().indefinitely();
}

启动应用时出现如下错误:

Caused by: java.lang.ClassNotFoundException: [Lxyz.property.model.CouncilTax;
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:518)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:468)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:518)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:468)
    at io.quarkus.cache.redis.runtime.RedisCacheImpl.loadClass(RedisCacheImpl.java:109)

改用Caffeine内存缓存则运行正常。我尝试在应用配置中设置:

#Cache settings
quarkus.cache.redis.expensiveResourceCache.key-type=java.lang.String
quarkus.cache.redis.expensiveResourceCache.value-type=xyz.property.model.CouncilTax

但仍出现相同错误,请问我遗漏了什么?

解决方案
  • 缓存名称配置不匹配
    代码中@CacheResult指定的缓存名称是council-tax-bands-by-postcode,但你配置里用的是expensiveResourceCache,两者完全不对应。Redis缓存的配置项必须和注解中的cacheName一致,把配置里的expensiveResourceCache替换成council-tax-bands-by-postcode。

  • 值类型需要指定为数组类型
    方法返回的是Uni<CouncilTax[]>,也就是CouncilTax数组,错误日志里的[Lxyz.property.model.CouncilTax;正是数组类的JVM标识。所以配置的value-type不能只写xyz.property.model.CouncilTax,要改成数组的全限定名:xyz.property.model.CouncilTax[]。

  • 确认类的访问权限
    确保xyz.property.model.CouncilTax类是public修饰的,Quarkus的类加载器需要能正常加载这个类,如果类是包私有或受保护的,会导致加载失败出现ClassNotFoundException。

调整后的正确配置如下:

#Cache settings
quarkus.cache.redis.council-tax-bands-by-postcode.key-type=java.lang.String
quarkus.cache.redis.council-tax-bands-by-postcode.value-type=xyz.property.model.CouncilTax[]

内容的提问来源于stack exchange,提问作者Simone Di Cola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:05:22