1

私は現在、Spring Integrationを初めて使用しています。
基本的に、Java Spring統合DSLと非同期に複数のファイルロケーションにポーリングしようとしています。私は、ファイル名を取得し、ファイル名でいくつかの操作を実行し、最終的にS3にファイルをプッシュする必要があります、私の質問は、ファイルで操作を実行するこれらのタスクは、タスク実行者またはサービスアクティベータハンドラで実行することができます。私はどちらが正しい場所であるかわからない。Spring統合サービスアクティベータハンドラビジネスロジック

@Autowired 
private AWSFileManager awsFileManager; 

@Bean 
public IntegrationFlow inboundChannelFlow(@Value("${file.poller.delay}") long delay, 
@Value("${file.poller.messages}") int maxMsgsPerPoll, 
TaskExecutor taskExecutor, MessageSource<File> fileSource) 
{ 
    return IntegrationFlows.from(fileSource, 
      c -> c.poller(Pollers.fixedDelay(delay) 
        .taskExecutor(taskExecutor) 
        .maxMessagesPerPoll(maxMsgsPerPoll))) 
      .handle("AWSFileManager", "fileUpload") 
      .channel(ApplicationConfiguration.inboundChannel) 
      .get(); 
} 

@Bean 
TaskExecutor taskExecutor(@Value("${file.poller.thread.pool.size}") int poolSize) { 
    ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); 
    //Runnable task1 =() -> {this.methodsamp();}; 
    taskExecutor.setCorePoolSize(poolSize); 

    //taskExecutor.execute(task1); 
    return taskExecutor; 
} 
@Async 
public void methodsamp() 
{ 
    try 
    { 
     awsFileManager.fileUpload(); 
     System.out.println("test"); 
    } 
    catch(Exception ex) 
    { 

    } 

ここにサンプルコードを添付しました。
また、これをパラメータとしてfileUploadメソッドに渡す必要があるため、チャンネル内のファイルのファイル名を取得する方法もあります。 お知らせください。

+0

SOスレッドごとにあまりにも多くの質問をしないでください。 –

+0

確かに..それは次回に続くでしょう。ありがとうございました ! – Raven21

答えて

1

質問が不明です。 TaskExecutorは、フロー内のスレッドコンテキスト用です。サービスアクティベータ(.handle())は、あなたのビジネスロジックメソッドに適しています。これは、エグゼキュータからのスレッドで実行できます。そしてあなたは実際にあなたのIntegrationFlowでそれらを正しく使用します。

FileReadingMessageSourcejava.io.Fileのメッセージを​​として生成します。だから、それはファイル名を取得する方法です - ちょうどFile.getName()から!

+0

ありがとうございますArtem。私はそれを持っているが、ハンドラは両方の文字列であるBean名とメソッド名だけを取ります。私はどのようにそれらのファイル名のパラメータを指定するでしょうか? – Raven21

+0

なぜそれについて気にしますか? AWS S3に送るには 'File'オブジェクトが必要です。だから、 'fileUpload()'に '.handle()'で受け取ったメッセージの 'poyload'を何か期待するべきです。 –

+0

「Books on the matter」または少なくともSpring Integration Reference Manualを読むことをお勧めします。 'fileReadingMessageSource'はファイルをペイロードとして持つメッセージを生成します。それらはチャンネルに送られます。 '.handle()'はそのチャンネルに加入し、あなたのサービスメソッドを呼び出し、メソッドの引数に適切な値を与えます。サービスメソッドを 'fileUpload(File fileToUpload)'にして、着信メッセージの 'payload'をこの引数に渡します。 –