轮询文件夹

时间:2018-01-25 10:16:37

标签: java spring apache-camel

我正在创建一个文件夹的自动轮询,我的路由是在spring XML文件中设置的,如何让应用程序保持运行并轮询该文件夹,我能够使用正常的路由来做到这一点它们在java中输入,但是现在因为使用XML route spring,我无法创建路由构建器或添加路由构建器。 我的主要是

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.apache.camel.main.Main;

public class FileTransferinSpring {
    public static void main(String args[]) throws InterruptedException {
        Main main = new Main();


        //main.addRouteBuilder(new //ClassPathXmlApplicationContext("MySpring.xml"));//this is now working
        @SuppressWarnings("resource")
        AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(
                "MySpring.xml");

        //ctx.start();
        System.out.println("Entered>>>>>");
        //Thread.sleep(3000);
        //ctx.stop();
    }

这是我的配置文件。

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd          
        http://camel.apache.org/schema/spring 
        http://camel.apache.org/schema/spring/camel-spring.xsd">
<camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="file:input?fileName=Hello.txt&amp;noop=true" />
            <to uri="file:output" />
        </route>

        <route>
            <from uri="file:input?fileName=Hello2.txt&amp;noop=true" />
            <to uri="file:output" />
        </route>


    </camelContext>

</beans>

3 个答案:

答案 0 :(得分:0)

您可以使用Spring中的 FileSystemWatcher 来监控文件和文件夹更改。

有关代码示例,请点击this链接。

FileSystemWatcher - Java doc

但正如评论中所建议的那样,您不需要基于Spring的解决方案,您可以使用纯Java或Apache库。

如果您想查看Java或Apache库以获得解决方案,请按照以下示例进行操作:

  1. Apache Library for File/Folder monitoring
  2. Java Solution for File/Folder monitoring.

答案 1 :(得分:0)

您是否正在将您的工作从Camel(java方式)转换为Camel(spring方式)?你的main方法似乎不完整,让它自动运行,将CamelContext设置为你的主对象来完成它。

public static void main(String args[]) throws InterruptedException {
    Main main = new Main();

    AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(
            "MySpring.xml");

    main.setApplicationContext(ctx);
    main.run();
}

答案 2 :(得分:0)

我认为您正在寻找以下解决方案。

@Component
public class FileRouteBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("file://{{dir.in}}?readLock=changed&include=.*.csv"&preMove={{dir.progress}}&move={{dir.out}}&moveFailed={{dir.error}}").setId("Poller");
    }
}
  • dir.in-用于文件轮询的源目录
  • dir.progress-文件将从中移入进行处理
  • dir.out-成功处理后,文件将移到此处
  • dir.error-在处理过程中发生任何错误时文件移至此处
  • readLock = changed-读取时将锁定文件
  • 包括-这将仅读取源目录(即文件夹中)中的csv文件

请注意,如果您不使用preMove,则将在“ in”文件夹中创建默认的.camel文件夹,并将文件的一个副本移至.camel文件夹。

所以我建议您在路线中使用preMove。