Java 如何使用apache camel sqlComponent运行sql查询
您好,我是apache camel框架的新手(因此我编写的代码很可能非常糟糕:)。我想连接到本地数据库并运行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
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