Apache Ignite 2.14.0能否脱离H2库运行?启动报错求助
问题
我在Apache Ignite 2.14.0版本的发布说明中看到:基于Calcite的SQL引擎已独立于基于H2的SQL引擎,不再需要将ignite-indexing模块和H2加入类路径。但启动最简Ignite实例时,却出现org.h2.value.ValueByte类找不到的错误。由于H2存在安全漏洞,我的Ignite应用已被迫停用,本以为2.14.0版本可摆脱H2,想请教是否能在无H2的情况下运行应用?
我使用Gradle管理依赖,依赖配置如下:
implementation fiels('/myfolder/apache-ignite/2.14.0/libs/ignite-core-2.14.0.jar') implementation fiels('/myfolder/apache-ignite/2.14.0/libs/cache-api-1.0.0.jar') implementation fiels('/myfolder/apache-ignite/2.14.0/libs/annotations-16.0.3.jar') implementation fiels('/myfolder/apache-ignite/2.14.0/libs/ignite-spring/ignite-spring-2.14.0.jar') implementation fiels('/myfolder/apache-ignite/2.14.0/libs/ignite-indexing/ignite-indexing-2.14.0.jar')
启动代码如下:
TcpDiscoveryMulticastIpFinder tcMp = new TcpDiscoveryMulticastIpFinder(); TcpDiscoverySpi spi = new TcpDiscoverySpi(); spi.setIpFinder(tcMp); IgniteConfiguration cfg = new IgniteConfiguration(); cfg.setClientMode(false); cfg.setDiscoverySpi(spi); Ignite ignite=Ignition.start(cfg);
报错发生在最后一行Ignition.start(cfg);。
解决方案
- 移除
ignite-indexing依赖:你当前依赖中包含的ignite-indexing模块在2.14.0版本里仍默认依赖H2(用于兼容旧特性)。如果业务不需要SQL查询、索引等功能,直接删除这一行依赖即可,此时Ignite核心模块无需H2就能正常启动。 - 需使用Calcite SQL引擎时的配置:如果要保留SQL功能,需保留
ignite-indexing但排除H2依赖,同时在Ignite配置中明确指定使用Calcite引擎。
Gradle依赖调整:
Ignite配置补充:implementation files('/myfolder/apache-ignite/2.14.0/libs/ignite-indexing/ignite-indexing-2.14.0.jar') { exclude group: 'com.h2database', module: 'h2' }SqlConfiguration sqlCfg = new SqlConfiguration(); sqlCfg.setSqlEngine(SqlEngine.CALCITE); cfg.setSqlConfiguration(sqlCfg); - 排查隐性依赖:执行
gradle dependencies命令分析项目依赖树,确认是否有其他模块间接引入了H2,如有则对应排除。
内容的提问来源于stack exchange,提问作者Tao Yang
相关产品推荐
相关产品推荐

