问题描述
我正在尝试实现将内容插入 MongoDB 的路由。下面是我尝试的路线,它给了我一个错误:
由:org.apache.camel.NoSuchBeanException:在注册表中找不到 bean:localhost:27017 类型:com.mongodb.client.MongoClient
from ctypes import cast,POINTER
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities,IAudioEndpointVolume
import math
# Get default audio device using PyCAW
devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(
IAudioEndpointVolume._iid_,CLSCTX_ALL,None)
volume = cast(interface,POINTER(IAudioEndpointVolume))
# Get current volume
for i in range(100):
currentVolumeDb = volume.GetMasterVolumeLevel()
if (currentVolumeDb<100):
volume.SetMasterVolumeLevel(currentVolumeDb+1.0,None)
# NOTE: -6.0 dB = half volume !
我不确定在何处以及如何定义类型为 MongoClient 的 bean,以及如何将主机和端口号作为参数传递。有人可以指导我吗?
解决方法
在你的路由定义中,你需要添加 beanId 如下:
from("rabbitmq:localhost:5672/tasks?autoDelete=false&routingKey=camel&queue=task_queue")
.bean(itemDetails,"consumeItemDetails(${exchange})")
.to("mongodb:mongoBean?database=ItemDB&collection=ItemDetails&operation=save");
并定义一个类型为 MongoClient 的 bean,在您的 xml/annotation 配置中提到 beanId,然后在 bean 中定义数据库连接参数:
使用 Spring xml 配置的示例:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<mongo:mongo-client id="mongoBean" host="${mongo.url}" port="${mongo.port}" credentials="${mongo.user}:${mongo.pass}@${mongo.dbname}">
<mongo:client-options write-concern="NORMAL" />
</mongo:mongo-client>
</beans>
使用注解的例子:
@Configuration
public class MongoConfig extends AbstractMongoClientConfiguration {
@Override
protected String getDatabaseName() {
return "test";
}
@Override
public MongoClient mongoClient() {
ConnectionString connectionString = new ConnectionString("mongodb://localhost:27017/test");
MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
.applyConnectionString(connectionString)
.build();
return MongoClients.create(mongoClientSettings);
}
@Override
public Collection getMappingBasePackages() {
return Collections.singleton("com.baeldung");
}
}
,
您需要声明一个 MongoClient
bean。如果您通过 Spring Boot (starter) 运行您的应用程序,它将为您的应用程序提供一个名为 mongo
的 bean。否则,您需要遵循 Chanfir 的建议。