【发布时间】:2016-12-10 11:40:31
【问题描述】:
我正在尝试使用 spring 集成的尾部文件,它的工作原理如下面的代码,但我有两个问题
@Configuration
public class RootConfiguration {
@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller() {
PollerMetadata pollerMetadata = new PollerMetadata();
pollerMetadata.setTrigger(new PeriodicTrigger(10));
return pollerMetadata;
}
@Bean
public MessageChannel input() {
return new QueueChannel(50);
}
@Bean
public FileTailInboundChannelAdapterFactoryBean tailInboundChannelAdapterParser() {
FileTailInboundChannelAdapterFactoryBean x = new FileTailInboundChannelAdapterFactoryBean();
x.setAutoStartup(true);
x.setOutputChannel(input());
x.setTaskExecutor(taskExecutor());
x.setNativeOptions("-F -n +0");
x.setFile(new File("/home/shahbour/Desktop/file.txt"));
return x;
}
@Bean
@ServiceActivator(inputChannel = "input")
public LoggingHandler loggingHandler() {
return new LoggingHandler("info");
}
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(4);
taskExecutor.afterPropertiesSet();
return taskExecutor;
}
}
根据以下日志,我有 4 个线程用于跟踪文件。我需要所有这些还是我可以禁用一些。为什么我有一个线程用于 Monitoring process java.lang.UNIXProcess@b37e761,Reading stderr,Reading stdout。
我问这个是因为我要在 voip 交换机上运行该程序,并且我想使用尽可能少的资源。
2016-12-10 13:22:55.666 INFO 14862 --- [ taskExecutor-1] t.OSDelegatingFileTailingMessageProducer : Starting tail process
2016-12-10 13:22:55.665 INFO 14862 --- [ main] t.OSDelegatingFileTailingMessageProducer : started tailInboundChannelAdapterParser
2016-12-10 13:22:55.682 INFO 14862 --- [ main] o.s.i.endpoint.PollingConsumer : started rootConfiguration.loggingHandler.serviceActivator
2016-12-10 13:22:55.682 INFO 14862 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 2147483647
2016-12-10 13:22:55.701 INFO 14862 --- [ main] c.t.SonusbrokerApplication : Started SonusbrokerApplication in 3.84 seconds (JVM running for 4.687)
2016-12-10 13:22:55.703 DEBUG 14862 --- [ taskExecutor-2] t.OSDelegatingFileTailingMessageProducer : Monitoring process java.lang.UNIXProcess@b37e761
2016-12-10 13:22:55.711 DEBUG 14862 --- [ taskExecutor-3] t.OSDelegatingFileTailingMessageProducer : Reading stderr
2016-12-10 13:22:55.711 DEBUG 14862 --- [ taskExecutor-4] t.OSDelegatingFileTailingMessageProducer : Reading stdout
我的第二个问题是,是否可以从乞讨开始读取文件并继续拖尾,我正在考虑为此 -n 1000 使用本机选项
注意:真正的代码是在创建新文件时监视文件夹中的新文件,然后启动尾部进程
【问题讨论】:
-
在阅读了 OSDelegatingFileTailingMessageProducer 的代码后,我看到需要 stderror 进程来检查文件移动或其他错误并将其作为事件发送,我看不到任何方法禁用它,也用于从文件开头读取 -n +0 已经这样做了