Невозможно получить соединение с 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>
Другие вопросы по тегам