2013-10-15 67 views
2

我想從數據庫讀取數據並使用Camel將記錄寫入文件。以下是我的代碼:從數據庫讀取數據並使用駱駝寫入文件

import javax.sql.DataSource; 
import org.apache.camel.CamelContext; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.impl.DefaultCamelContext; 
import org.apache.camel.impl.SimpleRegistry; 
import org.apache.commons.dbcp.BasicDataSource; 

public class JDBCExampleSimpleRegistry { 

    public static void main(String[] args) throws Exception { 
     final String url = "jdbc:oracle:thin:@MYSERVER:1521:myDB"; 
     DataSource dataSource = setupDataSource(url); 

     SimpleRegistry reg = new SimpleRegistry() ; 
     reg.put("myDataSource",dataSource); 

     CamelContext context = new DefaultCamelContext(reg); 
     context.addRoutes(new JDBCExampleSimpleRegistry().new MyRouteBuilder()); 

     context.start(); 
     Thread.sleep(5000); 
     context.stop(); 
    } 

    class MyRouteBuilder extends RouteBuilder { 
     public void configure() { 
      String dst = "C:/Local Disk E/TestData/Destination/?fileName=output.txt"; 
      from("direct:myTable") 
       .setBody(constant("select * from myTable")) 
       .to("jdbc:myDataSource") 
       .to("file://" + dst); 
     } 
    } 

    private static DataSource setupDataSource(String connectURI) { 
     BasicDataSource ds = new BasicDataSource(); 
     ds.setDriverClassName("oracle.jdbc.driver.OracleDriver"); 
     ds.setUsername("sa"); 
     ds.setPassword("devon1"); 
     ds.setUrl(connectURI); 
     return ds; 
    } 
} 

上面的程序工作正常,CamelContext被優雅地關閉。但是,目標文件未創建。我究竟做錯了什麼?

我是Apache Camel的新手,非常感謝任何幫助。我在Apache Camel 2.12.1上使用JDK7,並沒有使用Spring。

+0

該路由將不會被執行,因爲它從一個'direct:'端點開始。只有在另一條路由向其發送消息時,才能觸發'direct:'端點。 我完全不瞭解應用程序的完整要求。看起來你正試圖實現一個控制檯應用程序,它只能將一些數據從數據庫寫入文件一次。但我認爲駱駝更適合服務。 –

+0

由於你是駱駝新手,我建議閱讀這篇文章:http://java.dzone.com/articles/open-source-integration-apache –

回答

1

你可以看看SQL例子:http://camel.apache.org/sql-example.html,然後寫入文件,僅僅是發送到一個文件,而不是調用豆作爲SQL實例做的。

如果你想使用JDBC組件然後它沒有內置的消費者,所以你需要使用定時器或石英調度運行路線每隔X時間觸發的路線。

相關問題