本地用JBang运行Camel K JDBC组件报错求助
问题描述
我尝试在本地使用JBang运行配置好的Camel K JDBC集成,相关配置如下:
集成DSL文件 KamelKJdbcRouter.java
import org.apache.camel.builder.RouteBuilder; // camel-k: dependency=camel:jdbc // camel-k: dependency=mvn:io.quarkus:quarkus-jdbc-postgresql public class KamelKJdbcRouter extends RouteBuilder { @Override public void configure() throws Exception { from("timer://foo?period=10000") .setBody(constant("SELECT data FROM test LIMIT 5 OFFSET 0")) .to("jdbc:default") .to("log:info"); } }
application.properties 配置
quarkus.datasource.jdbc.url=jdbc:postgresql://postgres:5432/test quarkus.datasource.username=postgresadmin quarkus.datasource.password=admin123 quarkus.datasource.db-kind=postgresql
运行命令
jbang run -Dcamel.jbang.version=4.2.0 camel@apache/camel run KamelKJdbcRouter.java
报错信息
Caused by: java.lang.IllegalArgumentException: No default DataSource found in the registry at org.apache.camel.component.jdbc.JdbcComponent.createEndpoint(JdbcComponent.java:67) at org.apache.camel.support.DefaultComponent.createEndpoint(DefaultComponent.java:170) at org.apache.camel.impl.engine.AbstractCamelContext.doGetEndpoint(AbstractCamelContext.java:804) ... 34 more
该示例在K8s上运行正常,用JBang运行Camel K的其他组件(如ActiveMQ)也没问题,但Quarkus构建未生效,数据源未创建,请问该如何解决?
解决方案
问题根源是JBang默认用Camel Main模式启动,不支持Quarkus自动配置,导致数据源未被初始化。按以下步骤修复:
1. 补充Quarkus相关依赖
在KamelKJdbcRouter.java的注释依赖中添加Camel Quarkus核心及JDBC扩展:
// camel-k: dependency=camel:jdbc // camel-k: dependency=mvn:io.quarkus:quarkus-jdbc-postgresql // camel-k: dependency=mvn:org.apache.camel.quarkus:camel-quarkus-core // camel-k: dependency=mvn:org.apache.camel.quarkus:camel-quarkus-jdbc
2. 指定Quarkus模式运行
修改启动命令,明确启用Quarkus运行环境:
jbang run -Dcamel.jbang.version=4.2.0 camel@apache/camel run --quarkus KamelKJdbcRouter.java
3. 显式指定配置文件(可选)
如果配置文件未自动加载,添加--property-file参数指定路径:
jbang run -Dcamel.jbang.version=4.2.0 camel@apache/camel run --quarkus --property-file=application.properties KamelKJdbcRouter.java
关键说明
- Camel JBang默认的Main模式不兼容Quarkus的配置体系,无法解析
quarkus.datasource前缀的配置。 - 启用
--quarkus参数后,Camel切换到Quarkus运行时,Quarkus会自动根据配置创建并注册default数据源到Camel注册表,jdbc:default端点就能正常调用。
内容的提问来源于stack exchange,提问作者cheeghi
相关产品推荐
相关产品推荐

