2016-12-10 8 views
1

私は春の統合を使用して、尾ファイルにしようとしていますし、それは以下のコードとして機能していますが、私は4つのスレッドがために使用されているログの下にある2つの質問ファイルテールインバウンド・チャネル・アダプターを標準エラー出力と標準出力

@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; 

    } 
} 

パーを持っていますファイルをテーリングします。私はそれらのすべてが必要か、私はいくつかを無効にすることができますか?なぜ私はのスレッドを監視していますか?監視プロセス[email protected]、stderrを読み込み、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 [email protected] 
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 

私の2番目の質問は、あるそれは物乞いからファイルを読み始めると、私はこの-n 1000年

ノートのネイティブのオプションを使用して考えていた最後尾に継続することが可能である:本当コードが作成されたときに新しいファイルのフォルダを監視し、テールプロセスを開始します。

+0

** OSDelegatingFileTailingMessageProducer **のコードを読んだ後**私はstderrorプロセスがファイルの移動やその他のエラーをチェックしてイベントとして送信する必要があることを知っていましたが、これを無効にしたり、ファイルの-n +0は、すでに – Shahbour

答えて

0

プロセスモニタwaitFor()にプロセスが必要です。これは少しのメモリ以外のリソースは使用しません。

tailコマンドによって生成されるデータを実際に処理するには、stdoutリーダーが必要です。

開始スレッド(あなたのケースでは、taskExecutor-1は他のスレッドを開始した後に終了します)。

現在、stderrリーダーを無効にするオプションはありませんが、実行時にスレッドを2つだけ追加することは簡単です。

JIRA 'improvement' Issueと、もちろんcontributions are welcomeを自由に開くことができます。

+0

の返信をしてくれてありがとうございます。私はstderrスレッドを無効にするオプションがあることに貢献しようとします。 – Shahbour

関連する問題