Java 如何使用apache camel sqlComponent运行sql查询

Java 如何使用apache camel sqlComponent运行sql查询,java,apache-camel,Java,Apache Camel,您好,我是apache camel框架的新手(因此我编写的代码很可能非常糟糕:)。我想连接到本地数据库并运行sql查询,然后在控制台中显示结果。到目前为止,我有: import javax.sql.DataSource; import org.apache.camel.CamelContext; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.DefaultCamelContext; impor

您好,我是apache camel框架的新手(因此我编写的代码很可能非常糟糕:)。我想连接到本地数据库并运行sql查询,然后在控制台中显示结果。到目前为止,我有:

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.dbcp2.BasicDataSource;

public class sqlENEIA3 {

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

            SimpleRegistry reg = new SimpleRegistry();
            reg.put("myDataSource",dataSource);
            CamelContext context = new DefaultCamelContext(reg);    
            context.addRoutes(new sqlENEIA3().new MyRouteBuilder());


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

        }


          class MyRouteBuilder extends RouteBuilder {


            public void configure() {
            from("timer://Timer?period=60000").to("sql:select * from projects").to("stream:out");


            }
          } 

        private static DataSource setupDataSource(String connectURI) {
            BasicDataSource ds = new BasicDataSource();
            ds.setDriverClassName("org.apache.commons.dbcp.BasicDataSource"); 
            ds.setUsername("System");
            ds.setPassword("Igor_1");
            ds.setUrl(connectURI);
            return ds;
    }
  }
我收到的错误消息如下:

250 [main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel     2.16.3 (CamelContext: camel-1) is starting
260 [main] INFO org.apache.camel.management.ManagedManagementStrategy - JMX is enabled
492 [main] INFO org.apache.camel.impl.converter.DefaultTypeConverter -        Loaded 186 type converters
542 [main] INFO org.apache.camel.impl.DefaultRuntimeEndpointRegistry -   Runtime endpoint registry is in extended mode gathering usage statistics of all   incoming and outgoing endpoints (cache limit: 1000)
632 [main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel   2.16.3 (CamelContext: camel-1) is shutting down
642 [main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel 2.16.3 (CamelContext: camel-1) uptime 0.382 seconds
642 [main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel 2.16.3 (CamelContext: camel-1) is shutdown in 0.000 seconds
Exception in thread "main" org.apache.camel.FailedToCreateRouteException:   Failed to create route route1 at: >>> To[sql:select * from projects] <<< in   route: Route(route1)[[From[timer://Timer?period=60000]] -> [To[sql:... because   of Failed to resolve endpoint: sql://select%20*%20from%20projects due to:   DataSource must be configured
at   org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1072)
    at   org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:196)
    at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:944)
    at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:3260)
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:2983)
    at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:175)
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2814)
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2810)
    at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2833)
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2810)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2779)
    at com.ericsson.custom.opl.sqlENEIA3.main(sqlENEIA3.java:30)
    Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to    resolve endpoint: sql://select%20*%20from%20projects due to: DataSource must be    configured
    at  org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:587)
    at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:79)
    at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:211)
    at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:107)
    at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:113)
    at org.apache.camel.model.SendDefinition.resolveEndpoint(SendDefinition.java:62)
    at org.apache.camel.model.SendDefinition.createProcessor(SendDefinition.java:56)
    at org.apache.camel.model.ProcessorDefinition.makeProcessorImpl(ProcessorDefinition.java:535)
    at    org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:496)
    at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:220)
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1069)
    ... 12 more
Caused by: java.lang.IllegalArgumentException: DataSource must be configured
    at org.apache.camel.component.sql.SqlComponent.createEndpoint(SqlComponent.java:74)
    at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:114)
    at  org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:5 67)
    ... 22 more
250[main]INFO org.apache.camel.impl.DefaultCamelContext-apache camel 2.16.3(CamelContext:camel-1)正在启动
260[main]INFO org.apache.camel.management.ManagedManagementStrategy-JMX已启用
492[main]INFO org.apache.camel.impl.converter.DefaultTypeConverter-加载186个类型转换器
542[main]INFO org.apache.camel.impl.DefaultRuntimeEndpointRegistry-运行时端点注册表处于扩展模式,正在收集所有传入和传出端点的使用统计信息(缓存限制:1000)
632[main]INFO org.apache.camel.impl.DefaultCamelContext-apache camel 2.16.3(CamelContext:camel-1)正在关闭
642[main]INFO org.apache.camel.impl.DefaultCamelContext-ApacheCammel 2.16.3(CamelContext:camel-1)正常运行时间0.382秒
642[main]INFO org.apache.camel.impl.DefaultCamelContext-apache camel 2.16.3(CamelContext:camel-1)在0.000秒内关闭

线程“main”org.apache.camel.FailedToCreateRouteException中出现异常:未能在以下位置创建路由route1:>>>到[sql:select*from projects]您必须配置数据源:

from("timer://Timer?period=60000")
.to("sql:select * from projects?dataSource=myDataSource")
.to("stream:out");
您可以使用sql组件,如轮询消费者(不需要使用计时器)。可以在此处找到更多信息:()

更新1:

尝试使用数据源,如下所示:

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value= "oracle.jdbc.pool.OracleDataSource" />
  <property name="url" value="jdbc:oracle:thin:@localhost:1521:ENETEST" />
  <property name="username" value="System" />
  <property name="password" value="Igor_1" />
  <property name="maxIdle" value="1" />
</bean>

Tx用于重播。但现在我有另一个错误:)org.springframework.jdbc.CannotGetJdbcConnectionException:无法获取jdbc连接;嵌套异常是java.sql.SQLException:无法加载JDBC驱动程序类“org.apache.commons.dbcp.BasicDataSource”,我正在使用Maven