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

Apache Druid Calcite查询测试报错:因config为null无法读取componentSupplier字段

Apache Druid Calcite查询测试报错:因config为null无法读取componentSupplier字段

兄弟,我太懂你踩的这个坑了!Druid 30+版本之后,测试框架的Guice配置逻辑改了不少,旧的示例代码确实跟不上版本迭代,遇到这种问题太正常了。

之前我也碰到过类似情况,原来的configureGuice方法在新版本里已经被移除了,取而代之的是用DruidTestModule来管理测试依赖的注入。给你几个亲测有效的解决步骤:

  • 替换旧的Guice配置方式:别再找configureGuice方法了,现在测试类需要重写getModules方法,把Druid核心测试模块和你的自定义扩展模块都加进去。这样框架会自动处理config和componentSupplier的初始化,不会再出现null的问题。
  • 确保继承正确的父类:你的测试类要继承BaseCalciteQueryTest,这个父类在新版本里已经更新了初始化逻辑,能正确衔接测试所需的各种依赖。
  • 给你个代码示例参考:
public class YourCustomUdfTest extends BaseCalciteQueryTest {
    @Override
    protected List<? extends Module> getModules() {
        return Lists.newArrayList(
            // 加载Druid核心测试模块,负责初始化基础配置
            new DruidTestModule(),
            // 加载你的自定义扩展模块,这里要注册你的UDF
            new YourCustomUdfModule()
        );
    }

    // 编写测试用例,验证自定义函数的功能
    @Test
    public void testCustomUdfCalculation() {
        testQuery(
            "SELECT your_custom_udf(user_id) FROM test_datasource",
            ImmutableList.of(ImmutableMap.of("your_custom_udf(user_id)", "expected_result"))
        );
    }
}

另外还有几个小细节要注意:

  • 你的自定义模块里要正确注册UDF,比如通过绑定FunctionRegistry或者用@Provides方法把自定义函数注册进去;
  • 确保项目里所有Druid相关依赖的版本都是32.x,避免版本不一致导致的隐性问题;
  • 如果还是有config相关的异常,可以在getModules里加上ConfigModule.withEmpty()或者加载测试专用的配置文件,手动指定必要的配置项。

备注:内容来源于stack exchange,提问作者Paulo Alves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:44:37