2015-01-03 3 views
1

Я иду через Apache Camel и хочу вставить данные в DB. Моя база данных - SqlServer. Apache Camel версия 2.14.1Apache Camel JDBC Insert

Это то, что я пытался до сих пор,

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 file2DB { 

    public static void main(String[] args) throws Exception { 
     final String url = "jdbc:sqlserver://localhost:1433;databaseName=TestDB"; 

     DataSource datasource = setupDataSource(url); 
     SimpleRegistry simpleregistry = new SimpleRegistry(); 
     simpleregistry.put("DataSource", datasource); 
     CamelContext context = new DefaultCamelContext(simpleregistry); 
     context.addRoutes(new file2DB().new MyRouteBuilder()); 

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

    class MyRouteBuilder extends RouteBuilder { 
     @Override 
     public void configure() throws Exception { 
      try { 

       from("direct:myTable") 
       .setBody(constant("INSERT INTO employee1(empId,payrollId) VALUES('1234','4567')")) 
       .to("jdbc:DataSource"); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
    } 
    private static DataSource setupDataSource(String url){ 
     BasicDataSource basicDataSource = new BasicDataSource(); 
     basicDataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     basicDataSource.setUsername("sa"); 
     basicDataSource.setPassword("*****"); 
     basicDataSource.setUrl(url); 
     return basicDataSource; 
    } 

} 

Я проверил соединение Datasource используя ниже код и я получаю результат, так что нет никакой проблемы с связи кажется.

 Connection con=null; 
     try { 
      con = basicDataSource.getConnection(); 
      Statement st = con.createStatement(); 
      ResultSet rs = st.executeQuery("select * from employee1"); 

      while (rs.next()) { 
       System.out.println(rs.getString(2)); 
      } 

     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

Я не получаю никакой ошибки, и данные не встают в таблицу. Я также попробовал запрос «SELECT», который также не работает.

Я пробовал регистратор, и он дал мне много ошибок в журналах. Нет класса defn, который нашел твиттер и т. Д., Которого я совсем не использую, и я думаю, что моя ошибка не имеет отношения к этому.

Любая помощь.

+0

Там должны быть некоторые ошибки/исключения на терминальном сервере, когда что-то ненормальное происходит - когда что-то не вставляется или не извлекается из связанной базы данных. Вы ничего не получаете в журнале сервера - трассировке стека при попытке вставить или извлечь из базы данных? – Tiny

+0

если есть ошибка на конце сервера, то я думаю, что я пробовал тестировать datasource базовый запрос выбора, который тоже должен был бы сбой? – Jayesh

+0

Я тоже пробовал MySQL, такая же проблема сохраняется. Кажется, что у меня что-то отсутствует в верблюжьей апи. – Jayesh

ответ

4

Вам необходимо вызвать маршрут верблюда. Вы используете from("direct:myTable"), и это не делает ничего из коробки. Вам нужно либо отправить сообщение на эту конечную точку, либо изменить ее на таймер или что-то, что вызывает новое сообщение.

Чтобы отправить сообщение использовать ProducerTemplate, которые вы можете найти информацию о здесь

Смежные вопросы