2016-11-21 3 views
1

스프링 부트를 사용하여 Camel-SQL을 사용하여 MySQL DB를 쿼리하고 REST 서비스를 호출하는 낙타 경로를 시작합니다.Camel SQL - Spring 부트에서 SimpleRegistry에 DataSource 넣기

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}"); 

    } 
} 
가있는 application.properties

나는 낙타가 레지스트리에서 DataSource 빈을 찾을 수 없다는 것을 알게되었다. Java DSL을 사용하는 Spring Boot의 레지스트리에 "DataSource"를 주입하는 방법을 잘 모르겠습니다.

?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

그 낙타가 여기에 설명 된대로 당신이 # 구문을 사용하여 참조하는 URI에 사용하는 빈의 이름 : http://camel.apache.org/how-do-i-configure-endpoints.html (참조 콩)

그래서 모두 뭔가

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

DataSource을 만드는 빈의 이름이며 다른 이름을 지정할 수 있습니다. 예 :

@Bean("myDataSource") 

그리고 낙타 SQL 엔드 포인트가

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

안녕 클로스입니다, 감사합니다 응답에 대한 많은. 내가 한 가지 더 물어봐도 될까요? from ("sql : {{list.sql}}? dataSource = # dataSource") .log ("process row $ {body}") .end(); application.properties 파일에는 camel.springboot.main-run-controller = true가 포함되어 있습니다. 라우트는 CNTRL + C를 누를 때까지 무한히 실행됩니다. camel.springboot.main-run-controller를 제거하면 Camel이 라우트를 시작하고 메인 스레드를 중지합니다. 어쨌든 나는 카멜을 시작하고, 길을 실행하고 멈출 수 있습니다. 내 질문은 분명 희망입니다. 미리 감사드립니다! – user1637487

+0

FAQ보기 : http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html –

+0

안녕하세요 Claus, 죄송합니다. 매우 간단한 걸 놓치신다면 죄송합니다. 이 응용 프로그램에 대해 Spring Boot를 사용하고 있습니다. 나는 ("sql : {{list.eventnotification.sql}} dataSource = # dataSource") .log ("process row $ {body}") .to ("mock : bar"); getContext(). stop();을 추가했습니다. 여전히 route는 application.properties에서 camel.springboot.main-run-controller = true로 인해 중지되지 않습니다. 독립 실행 형 Java 응용 프로그램에서는 route (camelcontext.start())를 시작하고 수동으로 중지합니다. Spring Boot에서는 어떻게 작동합니까? Pls help – user1637487