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

Quarkus是否支持SOSS Cache?迁移SpringBoot遇JCache配置加载问题

问题:Quarkus迁移后Scaleout SOSS缓存无法加载Jcache配置

我们团队选用scaleoutsoftware/SOSS作为内存缓存方案,在SpringBoot环境下运行正常,但将应用迁移至Quarkus后,SOSS无法正常工作。Quarkus似乎无法正确加载或处理application.yml中的Jcache配置,注入CacheManager时出现依赖不满足的错误。

现有配置(application.yml)

quarkus:
  cache:
  type: jcache
  jcache:
     provider: com.scaleoutsoftware.soss.cache.ScaleoutCachingProvider

代码片段

@Autowired
private javax.cache.CacheManager cacheManager;

启动错误日志

[error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type javax.cache.CacheManager and qualifiers [@Default]
- java member: com.***.cache.DataCacheManager#cacheManager
- declared on CLASS bean [types=[com.***.cache.DataCacheManager, java.lang.Object], qualifiers=[@Default, @Named(value = "dataCacheManager"), @Any], target=com.***.cache.DataCacheManager]

解决建议

  1. 修正配置文件缩进问题
    Quarkus的YAML配置对缩进要求严格,你当前的配置中type: jcache缩进错误,导致cache节点下的配置不被正确解析。修正后的配置应为:

    quarkus:
      cache:
        type: jcache
        jcache:
          provider: com.scaleoutsoftware.soss.cache.ScaleoutCachingProvider
    
  2. 确保引入正确的Quarkus缓存扩展
    Quarkus的Jcache支持需要单独引入扩展,在Maven的pom.xml中添加依赖:

    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-cache-jcache</artifactId>
    </dependency>
    

    同时确认SOSS的客户端依赖已正确引入,且版本与Quarkus兼容。

  3. 替换@Autowired为CDI标准注解
    Quarkus基于CDI规范,虽然兼容Spring的@Autowired,但更推荐使用标准的@Inject注解来注入依赖:

    import javax.inject.Inject;
    import javax.cache.CacheManager;
    
    public class DataCacheManager {
        @Inject
        private CacheManager cacheManager;
        // 业务逻辑
    }
    
  4. 验证SOSS Provider类的可访问性
    检查类路径中是否存在SOSS的jar包,且com.scaleoutsoftware.soss.cache.ScaleoutCachingProvider类能被正常加载。可添加JVM启动参数-verbose:class,查看该类的加载日志,确认没有类找不到的问题。

  5. 手动创建CacheManager Bean(兜底方案)
    如果自动配置仍失效,可以手动编写CDI Producer来初始化SOSS的CacheManager:

    import javax.cache.CacheManager;
    import javax.cache.Caching;
    import javax.enterprise.context.ApplicationScoped;
    import javax.enterprise.inject.Produces;
    
    public class CacheManagerProducer {
        @Produces
        @ApplicationScoped
        public CacheManager produceCacheManager() {
            return Caching.getCachingProvider("com.scaleoutsoftware.soss.cache.ScaleoutCachingProvider")
                          .getCacheManager();
        }
    }
    

内容的提问来源于stack exchange,提问作者user1601373

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:50:13