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

Spring Boot集成Camel连接MS SQL Server找不到AbstractDataSource bean报错

错误原因
  • Spring Boot JDBC 自动配置只会在容器中注册类型为javax.sql.DataSource的Bean,你在ReportRouter中声明要注入的是org.springframework.jdbc.datasource.AbstractDataSource抽象类类型的Bean,容器中没有对应类型的实例,所以抛出找不到Bean的错误。
  • 你当前编写的路由逻辑完全没有用到手动注入的dataSource变量,这段注入代码本身就是冗余的。
解决方案

方案1:删除冗余的注入代码(推荐)

直接移除所有和DataSource注入相关的代码即可,Camel的jdbc组件会自动引用Spring容器中已经自动配置好的、名称为dataSource的数据源实例:

package com.bw;

import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;

@Component
public class ReportRouter extends RouteBuilder {

    @Override
    public void configure() {        
        from("timer:myTimer?repeatCount=1")
        .setBody(simple("select top 10 * from eai.Audit_General"))
        .log("SQL: ${body}")
        .to("jdbc:dataSource")
        .log("Out: ${body}");
    }

}

方案2:修改注入类型(有自定义使用DataSource的场景时使用)

如果你的业务逻辑确实需要用到DataSource实例,将注入的类型修改为标准的javax.sql.DataSource接口即可:

package com.bw;

import org.apache.camel.builder.RouteBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;

@Component
public class ReportRouter extends RouteBuilder {
    
    @Autowired
    DataSource dataSource;

    public DataSource getDataSource() {
        return dataSource;
    }

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public void configure() {        
        from("timer:myTimer?repeatCount=1")
        .setBody(simple("select top 10 * from eai.Audit_General"))
        .log("SQL: ${body}")
        .to("jdbc:dataSource")
        .log("Out: ${body}");
    }

}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:39:03