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

为何Drools运行依赖org.springframework.jdbc.core.RowMapper?

问题分析:Drools依赖Spring JDBC的原因及解决方法

核心原因

Drools核心规则引擎本身不依赖Spring JDBC,你遇到的RowMapper缺失问题,是因为项目中引入了Drools的Spring集成模块,或者配置了JDBC相关的规则加载逻辑:

  • Drools Spring集成模块:如drools-spring或drools-spring-boot-starter,这类模块为了支持Spring环境下的规则管理(比如从JDBC数据源加载规则、Spring事务适配),会引入Spring JDBC作为依赖,其中就包含org.springframework.jdbc.core.RowMapper。
  • JDBC规则存储配置:如果你的代码中使用了JdbcKnowledgeService或其他基于JDBC的规则仓库实现,也会触发对Spring JDBC的依赖。

解决方法

1. 精简Drools依赖(推荐)

如果只需要使用Drools核心规则引擎功能,移除所有Spring集成相关的Drools依赖,只保留核心模块:

<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-core</artifactId>
    <version>你的Drools版本</version>
</dependency>
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-compiler</artifactId>
    <version>你的Drools版本</version>
</dependency>

2. 保留Spring集成但排除JDBC依赖

如果确实需要Drools与Spring集成,但不需要从JDBC加载规则,可以在依赖中排除spring-jdbc:

<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-spring-boot-starter</artifactId>
    <version>你的Drools版本</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </exclusion>
    </exclusions>
</dependency>

同时确保你的规则加载逻辑不使用JDBC相关实现,改用classpath或文件系统加载规则:

@Configuration
public class DroolsConfig {
    @Bean
    public KieContainer kieContainer() {
        KieServices kieServices = KieServices.Factory.get();
        KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
        // 从classpath加载规则文件
        kieFileSystem.write(ResourceFactory.newClassPathResource("rules/MyRules.drl"));
        KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
        kieBuilder.buildAll();
        KieModule kieModule = kieBuilder.getKieModule();
        return kieServices.newKieContainer(kieModule.getReleaseId());
    }
}

3. 旧版本Drools同样出现问题的原因

从Drools 6.x版本开始,Spring集成模块就已经引入了Spring JDBC依赖,所以即使降级Drools版本,只要保留了drools-spring或drools-spring-boot-starter这类集成模块,就会触发RowMapper的依赖需求。


你的依赖、配置及报错信息参考

当前依赖示例

<dependencies>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-spring-boot-starter</artifactId>
        <version>7.74.0.Final</version>
    </dependency>
    <!-- 其他项目依赖 -->
</dependencies>

配置代码示例

@Configuration
public class DroolsConfig {
    @Bean
    public KieContainer kieContainer() {
        return KieServices.Factory.get().getKieClasspathContainer();
    }
}

报错信息

java.lang.NoClassDefFoundError: org/springframework/jdbc/core/RowMapper
at org.drools.spring.boot.autoconfigure.DroolsAutoConfiguration.kieRepository(DroolsAutoConfiguration.java:47)
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Failed to determine a suitable driver class

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:33:33