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
相关产品推荐
相关产品推荐

