当前位置: 首页 > 知识库问答 >
问题:

Spring一体化;复制服务在复制完成前拾取的文件

钱卓君
2023-03-14

应用背景

服务A

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:int="http://www.springframework.org/schema/integration"
       xmlns:int-file="http://www.springframework.org/schema/integration/file"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/integration
    http://www.springframework.org/schema/integration/spring-integration.xsd
    http://www.springframework.org/schema/integration/file
    http://www.springframework.org/schema/integration/file/spring-integration-file.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:property-placeholder location="classpath:application.properties"/>


    <bean name="redisMetaDataStore" class="org.springframework.integration.redis.metadata.RedisMetadataStore">
        <constructor-arg ref="redisConnectionFactory" />
    </bean>

    <bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="port" value="6379" />
    </bean>

    <int-file:inbound-channel-adapter id = "filesIn"
                                      channel="fileChannel"
                                      directory="file:${input.directory}"
                                      filter="incomingCompositeFilter">

        <int:poller id="fileInboudPoller" fixed-rate="${in.interval}" time-unit="SECONDS"  />
    </int-file:inbound-channel-adapter>

    <bean id="incomingCompositeFilter" class="org.springframework.integration.file.filters.CompositeFileListFilter">
        <constructor-arg>
            <list>
                <bean id="acceptOnceFilter" class="org.springframework.integration.file.filters.FileSystemPersistentAcceptOnceFileListFilter">
                    <constructor-arg ref="redisMetaDataStore"/>
                    <constructor-arg value="*"/>
                </bean>
                <bean id="notOlderThanDateFilter" class="com.fexco.bgeadmin.file.filter.NotOlderThanDateFilter">
                    <constructor-arg value="${file.lastModified.ignoreBeforeDate}"/>
                </bean>
                <bean id="documentConfigFilter" class="com.fexco.bgeadmin.file.filter.DocumentConfigFilter">
                </bean>
            </list>
        </constructor-arg></bean>

    <int:channel id="fileChannel"/>

    <int-file:outbound-channel-adapter id="save-as-file"
                                       auto-create-directory="true"
                                       channel="fileChannel"
                                       directory="file:${output.directory}"/>
</beans>

服务B

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:int="http://www.springframework.org/schema/integration"
       xmlns:int-file="http://www.springframework.org/schema/integration/file"
       xmlns:batch-int="http://www.springframework.org/schema/batch-integration"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/integration
         http://www.springframework.org/schema/integration/spring-integration.xsd
         http://www.springframework.org/schema/integration/file
         http://www.springframework.org/schema/integration/file/spring-integration-file.xsd
         http://www.springframework.org/schema/batch-integration
         http://www.springframework.org/schema/batch-integration/spring-batch-integration.xsd">

    <int:channel id="inboundFileChannel"/>
    <int:channel id="outboundJobRequestChannel"/>
    <int:channel id="jobLaunchReplyChannel"/>

    <int-file:inbound-channel-adapter id="filePoller"
                                      channel="inboundFileChannel"
                                      directory="${app.file.source}"
                                      auto-create-directory="true"
                                      prevent-duplicates="true"
                                      filter="incomingCompositeFilter">
        <int:poller fixed-rate="5000"/>
    </int-file:inbound-channel-adapter>

    <bean id="incomingCompositeFilter" class="org.springframework.integration.file.filters.CompositeFileListFilter">
        <constructor-arg>
            <list>
                <bean id="fileNameFilter" class="org.springframework.integration.file.filters.RegexPatternFileListFilter">
                    <constructor-arg value=".*\.(xls|xlsx|csv)$" />
                </bean>
                <bean id="ageFilter" class="com.fexco.bgeadmin.integration.filter.LastCreatedFileListFilter">
                    <property name="age" value="30"/>
                </bean>
            </list>
        </constructor-arg></bean>

    <int:transformer input-channel="inboundFileChannel"
                     output-channel="outboundJobRequestChannel" method="toRequest">
        <bean class="com.fexco.bgeadmin.integration.FileMessageToJobRequest"/>
    </int:transformer>

    <batch-int:job-launching-gateway request-channel="outboundJobRequestChannel"
                                     reply-channel="jobLaunchReplyChannel"/>

    <int:logging-channel-adapter channel="jobLaunchReplyChannel"/>

</beans>

共有1个答案

云默
2023-03-14

这类问题的最佳解决方案是#2--A不将文件“就地”写入B。使用上次修改的时间是不可靠的。

这是 的标准过程,它在下面使用FileWritingMessageHandler。它有一个属性TemporaryFileSuffix,默认为.writing。文件在复制后被重命名。

 类似资料:
  • 似乎没有什么影响它的行为,它直接拿起它,抛出一个异常,因为一些检查,在处理文件,并将它移动到错误文件夹。 我知道有一个问题与FTP文件传输,我将不得不面对稍后,但我不能使它工作在本地文件系统。 任何帮助都将不胜感激! 我不得不稍微修改一下参数: 因为它抱怨readLockTimeout应该大于readLockCheckInterval+ReadLockMinage。

  • 我有一个客户谁的FTP文件通过我们的服务器。我定义了一条路由,从这个目录中选择某些文件,并将它们移动到另一个要处理的目录中。问题是,它一看到它就拿它,而不是等到ftp完成。结果是to URI中描述的路径中的一个0字节文件。我尝试了每一个readLock选项(masterFile、rename、changed、fileLock),但都不起作用。我正在使用spring DSL定义我的骆驼路由。这里有一

  • 我正在创建一个使用 RestAPI 获取数据的应用程序,对于该操作,我使用改造 2、okhttp3 和 Jackson 将 json 解析为对象,我的应用程序还使用 Firebase 云消息传递 当我编译我的代码时,它会给我以下错误 错误:任务执行失败:app:transformresourceswithmergejavarefordebug。 com . Android . build . AP

  • 我想把文件从一个文件夹复制到子文件夹中,然后重命名文件名,我创建了子文件夹,然后重命名了文件名,这部分是: 但是我不能将这个重命名的文件复制到新的子文件夹中,它在父目录中重命名了它,而不是旧的文件名,我错在哪里了?

  • 大家好,我有一个spring boot rest api,每个键和值都有重复的结果,如下代码所示 正如您所看到的,每一列都是重复的,一列首字母大写,另一列全是小写 这是我的课: 我使用我的数据库中的postgres,这是我的代码 如有任何帮助或指导将不胜感激

  • 它显示无头服务是在豆荚顶部创建的。我没有办法强制连接到第一个吊舱或吊舱0或第二个吊舱,即吊舱1。