Camel SQL - Поместите источник данных в SimpleRegistry в Spring Boot

Я использую Spring Boot для запуска верблюжьего маршрута, который использует Camel-sql для запроса базы данных MySQL и вызова службы REST.

application.properties

db.driver=com.mysql.jdbc.Driver
db.url=mysql://IP:PORT/abc
db.username=abc
db.password=pwd

Application.java

public static void main(String[] args) {
    SpringApplication.run(WlEventNotificationBatchApplication.class, args);

}

DataSourceConfig.java

public class DataSourceConfig {

    @Value("${db.driver}")
    public String dbDriver;

    @Value("${db.url}")
    public String dbUrl;

    @Value("${db.username}")
    public String dbUserName;

    @Value("${db.password}")
    public String dbPassword;
    @Bean("dataSource")
    public DataSource getConfig() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName(dbDriver);
        dataSource.setUrl(dbUrl);
        dataSource.setUsername(dbUserName);
        dataSource.setPassword(dbPassword);

        return dataSource;
    }
}

WLRouteBuilder.java

@Component
public class WLRouteBuilder extends RouteBuilder {
    @Autowired
    private NotificationConfig notificationConfig;

    @Autowired
    private DataSource dataSource;

    @Override
    public void configure() throws Exception {

        from("direct:eventNotification")
                .to("sql:"+notificationConfig.getSqlQuery()+"?dataSource="+dataSource)
                .process(new RowMapper())
                .log("${body}");

    }
}

Я вижу ошибку ниже, когда я запускаю, обнаружил, что Camel не может найти компонент DataSource в реестре. Я не совсем уверен, как внедрить "DataSource" в реестр в Spring Boot с помощью Java DSL.

?dataSource=org.springframework.jdbc.datasource.DriverManagerDataSource%40765367 due to: No bean could be found in the registry for: org.springframework.jdbc.datasource.DriverManagerDataSource@765367 of type: javax.sql.DataSource

1 ответ

Это имя боба, который Camel использует в URI, где вы обращаетесь к нему с помощью # синтаксис, описанный здесь: http://camel.apache.org/how-do-i-configure-endpoints.html (ссылающийся на bean-компоненты)

Так что-то похожее

 .to("sql:"+notificationConfig.getSqlQuery()+"?dataSource=#dataSource"

куда dataSource это имя боба, который создает DataSource, который вы можете дать другое имя, например,

@Bean("myDataSource")

И тогда конечная точка Camel SQL

    .to("sql:"+notificationConfig.getSqlQuery()+"?dataSource=#myDataSource"
Другие вопросы по тегам