Apache Camel Cron作业调度

时间:2016-12-21 14:07:35

标签: java apache-camel

Apache骆驼的新手,我要求我需要每隔五分钟查找一个文件夹并将文件从源移动到目标。我编写了下面的代码,但是当我运行Job时,它将文件复制到目标,无论我将文件复制到源时,请帮助我理解这一点:

try{
      //...                   
   }
   catch(_error){
      throw new MyException(message, _error);
   }

2 个答案:

答案 0 :(得分:1)

正如Claus Ibsen所说,你可以直接使用cron:

public class CopyTest {
    public static void main(final String[] arguments) {
        final CamelContext camelContext = new DefaultCamelContext();
        try {
            camelContext.addRoutes(new RouteBuilder() {
                @Override
                public void configure() throws Exception {

                    from("file://c:/test/input?scheduler=quartz2&scheduler.cron=00+*/5+*+1/1+*+?+*")
                        .routeId("testRoute")
                        .log(LoggingLevel.INFO, "File name : ${header.CamelFileName}")
                        .to("file://c:/test/output");
                }
            });
            camelContext.start();
            Thread.sleep(10*60*1000);
            //camelContext.stop();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

更多信息可以在这里找到: http://www.davsclaus.com/2013/08/apache-camel-212-even-easier-cron.html

或在这里: http://camel.apache.org/file2.html URI选项 - >消费者 - >计划程序

或在这里: http://camel.apache.org/quartz2.html 使用QuartzScheduledPollConsumerScheduler

这是我的日志:

2016-12-23 21:52:24,440 [main           ] INFO  DefaultCamelContext            - Apache Camel 2.15.2 (CamelContext: camel-1) is starting
2016-12-23 21:52:24,440 [main           ] INFO  ManagedManagementStrategy      - JMX is enabled
2016-12-23 21:52:25,329 [main           ] INFO  DefaultTypeConverter           - Loaded 200 type converters
2016-12-23 21:52:25,985 [main           ] INFO  DefaultCamelContext            - AllowUseOriginalMessage is enabled. If access to the original message is not needed, then its recommended to turn this option off as it may improve performance.
2016-12-23 21:52:25,985 [main           ] INFO  DefaultCamelContext            - StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
2016-12-23 21:52:26,187 [main           ] INFO  QuartzComponent                - Create and initializing scheduler.
2016-12-23 21:52:26,187 [main           ] INFO  QuartzComponent                - Setting org.quartz.scheduler.jmx.export=true to ensure QuartzScheduler(s) will be enlisted in JMX.
2016-12-23 21:52:26,312 [main           ] INFO  StdSchedulerFactory            - Using default implementation for ThreadExecutor
2016-12-23 21:52:26,312 [main           ] INFO  SimpleThreadPool               - Job execution threads will use class loader of thread: main
2016-12-23 21:52:26,359 [main           ] INFO  SchedulerSignalerImpl          - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2016-12-23 21:52:26,359 [main           ] INFO  QuartzScheduler                - Quartz Scheduler v.2.2.1 created.
2016-12-23 21:52:26,390 [main           ] INFO  RAMJobStore                    - RAMJobStore initialized.
2016-12-23 21:52:26,421 [main           ] INFO  QuartzScheduler                - Scheduler meta-data: Quartz Scheduler (v2.2.1) 'DefaultQuartzScheduler-camel-1' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

2016-12-23 21:52:26,421 [main           ] INFO  StdSchedulerFactory            - Quartz scheduler 'DefaultQuartzScheduler-camel-1' initialized from an externally provided properties instance.
2016-12-23 21:52:26,421 [main           ] INFO  StdSchedulerFactory            - Quartz scheduler version: 2.2.1
2016-12-23 21:52:26,999 [main           ] INFO  DefaultCamelContext            - Route: testRoute started and consuming from: Endpoint[file://c:/test/input?scheduler=quartz2&scheduler.cron=00+*%2F5+*+1%2F1+*+%3F+*]
2016-12-23 21:52:26,999 [main           ] INFO  QuartzComponent                - Starting scheduler.
2016-12-23 21:52:26,999 [main           ] INFO  QuartzScheduler                - Scheduler DefaultQuartzScheduler-camel-1_$_NON_CLUSTERED started.
2016-12-23 21:52:26,999 [main           ] INFO  DefaultCamelContext            - Total 1 routes, of which 1 is started.
2016-12-23 21:52:26,999 [main           ] INFO  DefaultCamelContext            - Apache Camel 2.15.2 (CamelContext: camel-1) started in 2.574 seconds
2016-12-23 21:55:00,052 [amel-1_Worker-1] INFO  testRoute                      - File name : client.log

您需要依赖:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-quartz2</artifactId>
    <version>${camel.version}</version>
</dependency>

答案 1 :(得分:0)

为了安排我一直在使用CAMEL QUARTZ组件的路线。我相信克劳斯也一直暗指这个选择:

from("quartz://scheduler_name?cron={{cron.schedule}}")
    .routeId("cron-scheduler")

cron.schedule值在params中设置为:

00+00+*/2+1/1+*+?+*

即每两个小时跑一次。 所以要每隔5分钟运行一次:

00+*/5+*+1/1+*+?+*
相关问题