我最終沒有在Spring應用程序上下文中註冊OSDelegatingFileTailingMessageProducer實例,因爲沒有必要像Gary建議的那樣。相反,我使用了ApplicationListener,並使用我的Spring上下文進行了註冊。然後我在onApplicationEvent(...)方法中創建了tailers。下面是一個最小的版本:
public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
@Qualifier("outputChannel")
private SubscribableChannel outputChannel;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
OSDelegatingFileTailingMessageProducer tailer = new OSDelegatingFileTailingMessageProducer();
tailer.setOutputChannel(outputChannel);
tailer.setFile(new File("/file/to/tail.txt"));
tailer.setOptions("-f -n 0");
tailer.afterPropertiesSet();
tailer.start();
}
}
編輯:
此外,我們結束了不使用OSDelegatingFileTailingMessageProducer,但Apache的一個,因爲tail命令行爲不同在Unix上的不同口味。一見鍾情,我們無法確定任何性能差異。