Spring集成复制文件,复制后读取它们并通过http发送数据

时间:2017-07-16 11:45:38

标签: java spring-integration

我是弹簧集成的新手,我想每5秒做一些步骤:

  1. 检查目录是否有任何扩展名为.xml或.json的文件。
  2. 如果有以前扩展名的文件我希望将单个文件复制到其他目录中(如果有更多文件我想稍后复制它们应该像循环一样工作:先拿文件做某事,然后再回去,拿第二个文件等)。
  3. 将单个文件复制到目录后我想读取此文件并将文件中的数据以String格式发送到我的其余应用程序中。
  4. 我的其他应用会处理这些数据并给予回复。
  5. 在最后一步中,我希望打印出来的回复来自http。
  6. 为了达到这个目的,我准备了一些像这样的代码:

    <file:inbound-channel-adapter id="filesIn" directory="file:${java.io.tmpdir}/spring-integration-samples/input"
                                  filename-regex="^.*\.(xml|json)$">
        <int:poller id="poller" fixed-delay="5000"/>
    </file:inbound-channel-adapter>
    
    <int:service-activator input-channel="filesIn"
                           output-channel="filesOut"
                           ref="handler"/>
    
    <file:outbound-channel-adapter id="filesOut" directory="file:${java.io.tmpdir}/spring-integration-samples/output"
                                   delete-source-files="true"/>
    

    此代码将检查目录查找是否有任何文件扩展名.xml或.json每5秒。 我的服务激活器调用方法:

    public File handleFile(File input) {
        return input;
    }
    

    之后该文件将被复制到其他目录中。

    关键是如何将复制文件复制到新目录后,我可以读取此文件并通过http Post方法发送数据。

    Pls的家伙给我一些如何做到这一点的例子。我觉得这样:

    <int:gateway id="requestGateway"
                 service-interface="com.integration.service.RequestService"
                 default-request-channel="requestChannel" >
    </int:gateway>
    
    
    <int:channel id="requestChannel"/>
    
    <int-http:outbound-gateway request-channel="requestChannel"
                               url="http://localhost:8080/import/v1/documents/go"
                               http-method="POST"
                               expected-response-type="org.springframework.http.ResponseEntity"                             >
    
    </int-http:outbound-gateway>
    

    但要执行此请求,我只能从这样做:

    RequestService requestService = (RequestService)context.getBean("requestGateway");
    JSONObject obj = new JSONObject();
    obj.put("docID", "8");
    obj.put("subject", "111111");
    obj.put("content", "ssssss");
    obj.put("type", "ddddd");
    String doc = obj.toString();
    ResponseEntity reply = requestService.echo(doc);
    

    这是我的RequestServce界面:

    public interface RequestService {
        ResponseEntity echo(String request);
    }
    

    我将非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我不确定你为什么要先复制文件;只要你不使用任何队列或执行器通道,整个流程就会在轮询器线程上运行,在处理完第一个文件之前你不会得到下一个文件。

如果由于某种原因必须复制文件,请添加第二个文件入站通道适配器以侦听第二个目录;然后是变压器(如文件到串变压器);然后是出站的http网关。