Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用无计时器的Camel JDBC组件_Java_Apache Camel_Camel Jdbc - Fatal编程技术网

Java 如何使用无计时器的Camel JDBC组件

Java 如何使用无计时器的Camel JDBC组件,java,apache-camel,camel-jdbc,Java,Apache Camel,Camel Jdbc,我正在我的项目中进行ApacheCammel PoC。我在使用Camel JDBC组件时遇到了一个问题 我可以用JDBC组件从数据库中读取数据。但我需要始终使用计时器组件。根据Camel文档,JDBC组件不能在from()语句中使用。我尝试在from()语句中使用文档中给出的直接组件,但它不起作用 下面是我的代码: from("direct:zh_ICS_Test") //from("timer://myTimer?period=2s") .setBody(constant("select

我正在我的项目中进行ApacheCammel PoC。我在使用Camel JDBC组件时遇到了一个问题

我可以用JDBC组件从数据库中读取数据。但我需要始终使用计时器组件。根据Camel文档,JDBC组件不能在from()语句中使用。我尝试在from()语句中使用文档中给出的直接组件,但它不起作用

下面是我的代码:

from("direct:zh_ICS_Test")
//from("timer://myTimer?period=2s")
  .setBody(constant("select * from ZH_ICS_TEST"))
  .to("jdbc:myDataSource")
  .split(body())
  .convertBodyTo(String.class)
  .to("file://" + dst);
以下是控制台输出:

[main]INFO org.apache.camel.impl.DefaultCamelContext-apache camel 2.12.1(CamelContext:camel-1)正在启动[main]INFO org.apache.camel.management.ManagedManagementStrategy-JMX已启用 [main]INFO org.apache.camel.impl.converter.DefaultTypeConverter- 加载176型转换器[主]信息 org.apache.camel.impl.DefaultCamelContext-StreamCaching不在 使用。如果使用流,则建议启用流缓存。 有关更多详细信息,请参见[主页] INFO org.apache.camel.impl.DefaultCamelContext-路由:route1已启动 和消费来源:端点[direct://zh_ICS_Test][主要]信息 org.apache.camel.impl.DefaultCamelContext-总共1条路由,其中1条 开始了。[main]INFO org.apache.camel.impl.DefaultCamelContext- ApacheCamel 2.12.1(CamelContext:Camel-1)在0.798秒内启动 [main]INFO org.apache.camel.impl.DefaultCamelContext-apache camel 2.12.1(CamelContext:camel-1)正在关闭[main]INFO org.apache.camel.impl.DefaultShutdownStrategy-开始关闭 关机1路由(超时300秒)[驼峰(驼峰-1)线程#1- ShutdownTask]INFO org.apache.camel.impl.DefaultShutdownStrategy- 路由:路由1关闭完成,正在从以下位置消耗: 端点[direct://zh_ICS_Test][主要]信息 org.apache.camel.impl.DefaultShutdownStrategy-正常关闭1 路线在0秒内完成[main]信息 org.apache.camel.impl.DefaultCamelContext-ApacheCammel 2.12.1 (CamelContext:camel-1)正常运行时间5.818秒[main]信息 org.apache.camel.impl.DefaultCamelContext-ApacheCammel 2.12.1 (CamelContext:camel-1)在0.016秒内关闭

如果我使用定时器而不是直接组件,上面的代码可以工作。我不想总是使用计时器,只需要执行一次查询。我将Camel 2.12.1与JDK7一起使用


有人能帮忙吗?

你描述的行为是正常的。 对于from,您只有一条带有
直接组件的路由

在这种情况下,除非以编程方式将交换发送到该直接组件,否则不会发生任何事情

看骆驼医生怎么说:

direct:组件提供对任何 生产者发送消息交换时的消费者。该端点可以 用于连接同一驼峰上下文中的现有路由


这是预期的,因为路由没有收到任何要使用的入站exchange,而这将触发路由

使用计时器组件时,不需要交换,因为它是由组件生成的:

timer:组件用于在计时器触发时生成消息交换。 您只能使用来自此终结点的事件

如果你想坚持使用
direct:
,你必须以某种方式将
的交换发送到(“direct:zh\u ICS\u Test”)

您可以使用任何端点来触发它:

from("...").to("direct:zh_ICS_Test");
如果您计划定期运行路线,您可以使用来完成(请阅读文档了解实施细节):

from("quartz://myGroup/myTimerName?trigger.repeatInterval=2000&trigger.repeatCount=5").to("direct:zh_ICS_Test");