Camel-K 1.6.0连接MongoDB默认访问本地地址问题咨询
Camel-K 1.6.0连接MongoDB配置方案
问题原因
你当前配置不生效的核心原因是:当你通过camel.beans预先注册mongoBean作为MongoClient实例时,Camel MongoDB组件会优先使用该已实例化的客户端,不会读取URI中配置的hosts、用户名、密码等连接参数。你当前配置的无参构造com.mongodb.MongoClient默认会连接127.0.0.1:27017,所以抛出连接超时异常。
疑问解答
1. 是否需要引用其他类?
不需要,你当前使用的com.mongodb.MongoClient是适配Camel-K 1.6(对应Camel 3.11.x版本)MongoDB组件的正确类,无需替换。
2. mongoBean相关属性配置方案
推荐两种配置方式,都不需要在URI中写连接参数:
方案一:通过连接字符串构造(更简洁)
修改integration.properties内容如下:
# 构造MongoDB连接URI camel.beans.mongoClientURI = #class:com.mongodb.MongoClientURI('mongodb://[替换为你的用户名]:[替换为你的密码]@[替换为你的主机地址]:[替换为端口]/[替换为数据库名]') # 用连接URI实例化MongoClient camel.beans.mongoBean = #class:com.mongodb.MongoClient(#mongoClientURI)
对应路由中的URI可以简化为:
.to("mongodb:mongoBean?database=[替换为你的数据库名]&collection=[替换为你的集合名]&operation=getDbStats")
方案二:拆分配置各项参数
如果需要单独配置各属性,可使用如下配置:
# 配置MongoDB服务地址 camel.beans.serverAddress = #class:com.mongodb.ServerAddress('[替换为你的主机地址]', [替换为端口,默认27017]) # 配置认证凭证 camel.beans.mongoCredential = #class:com.mongodb.MongoCredential('createCredential', '[替换为你的用户名]', '[替换为你的数据库名]', '[替换为你的密码]'.toCharArray()) # 构造MongoClient实例 camel.beans.mongoBean = #class:com.mongodb.MongoClient(#serverAddress, #mongoCredential, #class:com.mongodb.MongoClientOptions('builder().build()'))
额外注意
如果运行时提示缺少MongoDB组件依赖,可在Java文件开头的注释中添加依赖声明:
// camel-k: language=java property=file:integration.properties dependency=mvn:org.apache.camel:camel-mongodb3
部署命令无需修改,仍使用kamel run MongoDBTest.java --dev即可。
内容的提问来源于stack exchange,提问作者Bjorn Thor Jonsson
相关产品推荐
相关产品推荐

