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

Quarkus配置RedisHostsProvider后运行时找不到对应实现类如何解决?

问题根因

Quarkus是通过CDI容器查找对应名称的RedisHostsProvider实现类,你自定义的实现类没有被CDI托管,也没有指定对应的Bean名称,因此运行时无法找到匹配的实例。

解决步骤

  1. 给QuoteRedisHostsProvider类添加CDI作用域注解和@Named名称注解,修改后代码如下:
package gas.redis;

import io.quarkus.redis.client.RedisHostsProvider;
// Quarkus 3+ 使用jakarta包,低版本请替换为javax包
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Named;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Set;

@ApplicationScoped
// 注解内的名称必须和application.properties中配置的hosts-provider-name完全一致
@Named("gas.redis.QuoteRedisHostsProvider")
public class QuoteRedisHostsProvider implements RedisHostsProvider {

    @Override
    public Set<URI> getHosts() {
        System.out.println("In QuoteRedisHostsProvider");
        String redis_url = System.getenv("REDIS_URL");
        URI redisURI = null;
        try {
            redisURI = new URI(redis_url);
        }
        catch(Exception e) {
            e.printStackTrace();
            try {
                redisURI = new URI("redis://localhost:6379");
            } catch (URISyntaxException ignored) {
            }
        }
        return Set.of(redisURI);
    }
}
  1. 若你的项目启动类不在gas包及其子包下,需要在application.properties中添加配置放开包扫描:
quarkus.arc.include-packages=gas.redis

可选优化

你可以将@Named的值修改为更简洁的短名称,例如@Named("quoteRedisProvider"),同步修改application.properties配置为quarkus.redis.hosts-provider-name=quoteRedisProvider即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:39:02