Невозможно получить соединение с mariaDB с верблюжьим компонентом SQL
Я всегда получаю следующее исключение при попытке подключиться к базе данных mariDB, и я не могу понять, как правильно определить источник данных.
No bean could be found in the registry for: myDataSource of type: javax.sql.DataSource
Мой код довольно прост и выглядит следующим образом:
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
String url = "jdbc:mariadb://localhost:3306/testDB";
BasicDataSource ds = new BasicDataSource();
ds.setUsername("user");
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setPassword("password");
ds.setUrl(url);
SimpleRegistry registry = new SimpleRegistry();
registry.put("myDataSource", ds);
CamelContext context = new DefaultCamelContext(registry);
this.setContext(context);
//poll the mySQL Database every x minutes.
from("timer://Timer?period=6000")
.to("sql:select * from testDB?dataSource=myDataSource");
}
};
}
Я уже попробовал версию Blueprint для определения источника данных, но не смог заставить ее работать.
Это настроено правильно? могу ли я пропустить зависимость или у меня указаны неправильные драйверы?
1 ответ
Изучив примеры, я узнал, как решить мою проблему.
В JDSL в CamelTestSupport контекст регистрируется методом createCamelContext, а источник данных добавляется в контекст.
public class IntegrationTest extends CamelTestSupport{
@Override
public CamelContext createCamelContext() {
String url = "jdbc:mysql://localhost:3306/";
DataSource dataSource = setupDataSource(url);
SimpleRegistry registry = new SimpleRegistry();
registry.put("myDataSource", dataSource);
CamelContext context = new DefaultCamelContext(registry);
return context;
}
private static DataSource setupDataSource(String connectURI) {
BasicDataSource ds = new BasicDataSource();
ds.setUsername("username");
ds.setPassword("password");
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl(connectURI);
return ds;
}
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("timer://Timer?period=6000")
.to("sql:select * from testdb.testTable
+ " ?dataSource=myDataSource" )
.to("mock:result");
}
};
}
В файле чертежа компонент должен быть установлен / настроен, а затем на него ссылается компонент SQL следующим образом:
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="http:localhost:3306"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
</bean>
<bean id="sql" class="org.apache.camel.component.sql.SqlComponent">
<property name="dataSource" ref="dataSource"/>
</bean>