2016-11-21 1 views
1

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

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: [email protected]67 of type: javax.sql.DataSource 

ответ

2

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

Так-то так

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

Где dataSource - название компонента, которое создает DataSource, на которое вы можете дать другое название, например

@Bean("myDataSource") 

И тогда верблюд SQL является конечной точкой

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

Привет Клаус, Большое спасибо за ваш ответ. Могу я задать вам еще один вопрос. from ("sql: {{list.sql}}? dataSource = # dataSource") .log ("строка процесса $ {body}") .end(); и в файле application.properties я включил camel.springboot.main-run-controller = true. Маршрут выполняется бесконечно, пока я не нажимаю CNTRL + C. Если я удалю camel.springboot.main-run-controller, Camel начнет маршрут и остановит основной поток. В любом случае, я могу запустить Camel, выполнить маршрут и остановиться. Надеюсь, мой вопрос ясен. Заранее спасибо! – user1637487

+0

См. Это FAQ: http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html –

+0

Привет, Клаус, Извините, если мне не хватает чего-то очень простого. Я использую Spring Boot для этого приложения. Я попытался из ("sql: {{list.eventnotification.sql}}? DataSource = # dataSource") .log ("строка процесса $ {body}") .to ("mock: bar"); и добавил getContext(). stop() ;. Тем не менее маршрут не остановлен из-за camel.springboot.main-run-controller = true в application.properties. В автономном приложении Java мы запускаем маршрут (camelcontext.start()) и останавливаем его вручную. Как это работает в Spring Boot? Помощь Pls – user1637487