我在application-context.xml文件中有以下内容:
public Classname( String aName, int aScore,)
{
score = aScore;
name = aName;
}
和我的路线(片段)看起来像这样:
<bean id="reportingDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://192.168.1.1:5432/reports"/>
<property name="username" value="xxx"/>
<property name="password" value="xxx"/>
<property name="initialSize" value="3"/>
<property name="maxActive" value="10"/>
</bean>
<bean id="reportingSql" class="org.apache.camel.component.sql.SqlComponent">
<property name="DataSource" ref="reportingDataSource"/>
</bean>
很明显,我只是在这里的水中伸出脚趾。
此代码在.to("reportingSql:insert into my_table (uuid, name, created_at, created_by) values ('a','namename', 1, 2)")
:
/var/log/tomcat/whistler.log
如果我更改了&quot; reportSql&#39;在xml文件和路径中只是&#39; sql&#39;,我进一步 - 错误消失了。是&#39; sql&#39;魔术,莫名其妙?
如果是的话,我认为没问题,但如果我想使用其他数据源该怎么办?我不能把它们都称为&#39; sql&#39;。
答案 0 :(得分:1)
通过ComponentResolver
解析组件。默认情况下,DefaultComponentResolver
使用以下策略:
Component
FactoryFinder
来实例化新组件。此工厂在META-INF/services/org/apache/camel/component/
换句话说,您想要做的是:Camel应该检查注册表中的命名实例。但是,在您的示例中,您使用spring文件来注册bean,使用java来创建路由。
使用Spring,当您使用<camelContext../>
时,会创建SpringCamelContext
,而不是DefaultCamelContext
。此上下文使用多个服务,允许在Spring应用程序中更好地集成。其中一项服务是ApplicationContextRegistry
,它将Spring bean集成到camel注册表中。这个注册表允许使用在Spring中注册的bean Component
。
因此,请检查您是否在Spring上下文中使用CamelContext
。如果没有,或者您无法使用托管的camelContext,则可以尝试使用SpringCamelContext
或ApplicationContextRegistry
。
请参阅: