【发布时间】:2018-08-16 14:28:19
【问题描述】:
在 Spring Integration 中如何防止两台不同的机器在同一个文件中工作?我知道 nio library(javaSE) 提供了一种锁定 File FileLocker 的机制,但是如何使用 Spring Integration 来实现它呢? 一个具体的例子将不胜感激。
【问题讨论】:
标签: java spring spring-integration nio integration-patterns
在 Spring Integration 中如何防止两台不同的机器在同一个文件中工作?我知道 nio library(javaSE) 提供了一种锁定 File FileLocker 的机制,但是如何使用 Spring Integration 来实现它呢? 一个具体的例子将不胜感激。
【问题讨论】:
标签: java spring spring-integration nio integration-patterns
确实有一个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 和共享持久性ConcurrentMetadataStore:https://docs.spring.io/spring-integration/docs/5.0.3.RELEASE/reference/html/files.html#file-reading
【讨论】: