如何使用骆驼创建数据源? [英] how to create datasource using camel?

查看:34
本文介绍了如何使用骆驼创建数据源?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚开始学习 Apache Camel.我了解路由和组件的基础知识.现在我想尝试连接到 Oracle 数据库,从一个特定的表中读取记录,然后使用 File 组件将这些记录写入文件.要从数据库读取,我假设我需要使用 JDBC 组件并提供 dataSourceName.

I have just started learning Apache Camel. I understood the basics of Routes and Components. Now I want to give a try by connecting to Oracle database, reading records from one particular table and write those records to a file using File component. To read from database I assume I need to use JDBC component and give the dataSourceName.

但是,我找不到有关如何使用骆驼创建数据源的任何信息.我发现的与此主题相关的所有信息都使用 Spring DSL 示例.我不使用 Spring,我只需要使用简单的独立 Java 应用程序对此进行测试.

However, I couldn't find any info on how to create a dataSource using camel. All info that I found related to this topic uses Spring DSL examples. I don't use Spring and I just need to test this using simple standalone Java application.

我在 Apache Camel 2.12.1 中使用 JDK7u25.

I am using JDK7u25 with Apache Camel 2.12.1.

有人可以发布一个示例以从 oracle 表中读取并写入文件吗?

Can someone please post a sample to read from the oracle table and write to a file?

在网上查了几个解决方案后,我了解到以下两种方法:

After checking several solutions on the web, I came to know about following two approaches:

  1. Camel 以 独立运行.这是我的代码:

import javax.sql.DataSource;    
import org.apache.camel.main.Main;
import org.apache.camel.builder.RouteBuilder;
import org.apache.commons.dbcp.BasicDataSource;

public class JDBCExample {

    private Main main;

    public static void main(String[] args) throws Exception {
        JDBCExample example = new JDBCExample();
        example.boot();
    }

    public void boot() throws Exception {
        // create a Main instance
        main = new Main();
        // enable hangup support so you can press ctrl + c to terminate the JVM
        main.enableHangupSupport();

        String url = "jdbc:oracle:thin:@MYSERVER:1521:myDB";
        DataSource dataSource = setupDataSource(url);

        // bind dataSource into the registery
        main.bind("myDataSource", dataSource);

        // add routes
        main.addRouteBuilder(new MyRouteBuilder());

        // run until you terminate the JVM
        System.out.println("Starting Camel. Use ctrl + c to terminate the JVM.\n");
        main.run();
    }

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

    private 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;
    }
}

  • 使用 Claus lbsen 提到的方法.再次是代码:

  • Using the approach mentioned by Claus lbsen. Here is the code again:

    import javax.sql.DataSource;
    import org.apache.camel.CamelContext;
    import org.apache.camel.impl.DefaultCamelContext;
    import org.apache.camel.impl.SimpleRegistry;
    import org.apache.camel.main.Main;
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.commons.dbcp.BasicDataSource;
    
    public class JDBCExample {
    
        private Main main;
    
        public static void main(String[] args) throws Exception {
            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 JDBCExample().new MyRouteBuilder());
            context.start();
            Thread.sleep(5000);
            context.stop();
        }
    
        class MyRouteBuilder extends RouteBuilder {
            public void configure() {
                String dst = "C:/Local Disk E/TestData/Destination";
                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;
        }
    }
    

  • 但在这两种情况下,我都遇到了以下异常:

    But in both the cases I am getting below exception:

    Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: jdbc://myDataSource due to: No component found with scheme: jdbc
        at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:534)
        at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:63)
        at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:192)
        at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:106)
        at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:112)
        at org.apache.camel.model.SendDefinition.resolveEndpoint(SendDefinition.java:61)
        at org.apache.camel.model.SendDefinition.createProcessor(SendDefinition.java:55)
        at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:500)
        at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:213)
        at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:909)
        ... 12 more
    [Thread-0] INFO org.apache.camel.main.MainSupport$HangupInterceptor - Received hang up - stopping the main instance.
    

    推荐答案

    我真傻!我没有在 CLASSPATH 中包含camel-jdbc-2.12.1.jar.现在上面的例子可以工作了.

    So silly me! I had not included camel-jdbc-2.12.1.jar in the CLASSPATH. Now above examples work.

    这篇关于如何使用骆驼创建数据源?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆