1

我已经创建/创建了一个简单的 Apache Camel 程序来将数据从源数据库移动到目标数据库。我已经配置了一个路线来做到这一点,它的工作原理!问题是它只是每秒左右执行一次root。我只希望它执行一次。

我一直在玩定时器 repeatCount 但不能完全正确地找到根。任何人都可以帮助我尝试重新编写下面的内容,以便它只执行一次。

  <bean id="sourceSql" class="org.apache.camel.component.sql.SqlComponent">
    <property name="dataSource" ref="sourceDataSource"/>
  </bean>     
  <bean id="targetSql" class="org.apache.camel.component.sql.SqlComponent">
    <property name="dataSource" ref="targetDataSource"/>
  </bean>

  <camelContext xmlns="http://camel.apache.org/schema/spring">
    <propertyPlaceholder location="classpath:sql.properties" id="placeholder"/>
    <route id="processProduct-route">
        <description>route that process the orders by picking up new rows from the database
         and when done processing then update the row to mark it as processed</description>
        <from uri="sourceSql:{{sql.selectProduct}}"/>
        <to uri="targetSql:{{sql.insertProduct}}"/>
        <log message="${body}"/>
    </route>

提前致谢

4

1 回答 1

6

您可以从路线停止路线,请参阅:http ://camel.apache.org/how-can-i-stop-a-route-from-a-route.html

尽管从 Camel 2.11 开始,您也可以将消息发送到更简单的控制总线端点。所以你可以在路由的 endp 发送到这个端点。

  <route id="processProduct-route">
        <description>route that process the orders by picking up new rows from the database
         and when done processing then update the row to mark it as processed</description>
        <from uri="sourceSql:{{sql.selectProduct}}"/>
        <to uri="targetSql:{{sql.insertProduct}}"/>
        <log message="${body}"/>
        <to uri="controlbus:route?routeId=processProduct-route&amp;action=stop&amp;async=true"/>
    </route>
于 2013-08-31T06:30:54.377 回答