【问题标题】:Spring Integration File SupportSpring 集成文件支持
【发布时间】:2018-08-16 14:28:19
【问题描述】:

在 Spring Integration 中如何防止两台不同的机器在同一个文件中工作?我知道 nio library(javaSE) 提供了一种锁定 File FileLocker 的机制,但是如何使用 Spring Integration 来实现它呢? 一个具体的例子将不胜感激。

【问题讨论】:

    标签: java spring spring-integration nio integration-patterns


    【解决方案1】:

    确实有一个org.springframework.integration.file.locking.NioFileLocker 实现可用于FileReadingMessageSource 选项,例如:

    /**
     * Optional. Sets a {@link FileLocker} to be used to guard files against
     * duplicate processing.
     * <p>
     * <b>The supplied FileLocker must be thread safe</b>
     * @param locker a locker
     */
    public void setLocker(FileLocker locker) {
    

    从 XML 的角度来看是这样的:

    <file:inbound-channel-adapter>
        <file:nio-locker/>
    </file:inbound-channel-adapter>
    

    更多信息在Reference Manual

    在不同的 JVM 中避免并发访问和重复的另一种选择是使用 FileSystemPersistentAcceptOnceFileListFilter 和共享持久性ConcurrentMetadataStorehttps://docs.spring.io/spring-integration/docs/5.0.3.RELEASE/reference/html/files.html#file-reading

    【讨论】:

    • 我想把它移到另一个文件夹,我可以做到。但问题是 FileLocker 在我做任何事情之前锁定了文件。我的意思是我想锁定文件,将其移动到另一个文件夹并阅读。如果我有 2 个差异进程,那么首先选择文件的人应该锁定它并移动到另一个文件夹。请帮忙
    猜你喜欢
    • 2020-07-12
    • 2010-10-12
    • 2015-06-06
    • 2011-03-11
    • 2021-01-08
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多