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

