2016-05-04 12 views
1

ファイルから読み込み、処理を行い、最後にカスタマイズされた出力を書き込むバッチバッチアプリケーションがあります。これはすべてワンステップで起こります。次のステップでは、入力ファイルをアーカイブするタスクレットがあります(別のフォルダに移動)。このアプリケーションはうまく動作します。しかし、今ではさらに処理されるリモートサーバ上でファイルを出力する必要があります。私は、アウトバウンドチャネルアダプタにフィードする入力チャネルを作成したスプリング統合を使用してsftpへの道を持っています。メッセージにペイロードとしてファイルを置き、メッセージをチャネルに送信します。私がここで見る唯一の問題は、毎回コンテキストを取得しなければならないことです。これは、タスクを実行するための頑丈な方法のように見える、春の設定ファイルを読み込むためです。 SBとSIを統合する方法について誰もが知っていますか?スプリングバッチとのスプリング統合を使用

私の設定を見たい場合はお知らせください... ありがとうございました!!

log.info("Starting transfer of outputFile : " + absoluteOutputFileName); 
final File file = new File(absoluteOutputFileName); 
final Message<File> message = MessageBuilder.withPayload(file).build(); 
AppContextProvider context = new AppContextProvider(); 
final MessageChannel inputChannel = context.getApplicationContext().getBean("toChannel",MessageChannel.class); 
inputChannel.send(message); 
log.info("transfer complete for : " + absoluteOutputFileName); 

答えて

4

は内spring-batch-integrationモジュールを見てみましょうSFTPサーバへの出力ファイルをプッシュする再び春の設定をロードせずに同じアプリ-コンテキストにアクセスするための

コード

public class AppContextProvider implements ApplicationContextAware{ 

    private static ApplicationContext ctx; 

    public ApplicationContext getApplicationContext() { 
     return ctx; 
    } 

    public void setApplicationContext(ApplicationContext appContext) throws BeansException { 
     ctx = appContext; 
    } 
} 

コードSpring Batchプロジェクトそこには、メッセージを介してジョブを起動するためのコンポーネントがあります。あなたの状況では、ファイルをFTPしてからJobLaunchingMessageHandlerにジョブを起動させます。 https://www.youtube.com/watch?v=8tiqeV07XlI

+0

ご意見ありがとうございます。私はそれを通過します、私は私のアプリケーションの同じアプリケーションコンテキストを取得する方法を発見した瞬間。それが正しいかどうか、またはこれに問題がある場合は、お勧めします。私のオリジナルの質問にコードを追加しました –

+0

実行するジョブごとにApplicationContextを作成するのはなぜですか? –

+0

ジョブごとにApplicationContextを作成していません。私はスプリングの設定を一度ロードし、各ファイルごとに1つずつジョブを呼び出す(私は利用可能なファイルとループを実行するためにi \ pフォルダをチェックしている) –

0

マイケルが言ったように、あなたは間違いなくレバレッジspring-batch-integrationを見てみたいと思うでしょう:

また、私はこのトピックに数年前SpringOneで提示共同話のこのビデオを見ることができます。実際にSpring IntegrationをSpringバッチジョブの100%を起動するためのラッパーとして使用します。

spring-integration-fileインバウンドチャネルアダプタを利用してステージングディレクトリをポーリングし、新しいバッチファイルがいつ着いたかを示すことが特に有用な使用例です。ポーラが新しいファイルを見つけると、入力ファイル名をパラメータとして使用して新しいバッチジョブを起動します。

これは、ジョブが任意の間隔でキックオフするのではなく、ファイルごとに1つのジョブインスタンスが存在するため、再ステージ可能性に関しては本当に助かりました。しかし、多くのファイルがステージングフォルダ。処理中に例外が発生した場合は、100個の「良い」ファイルのうち99個が最初に終了するのを待つのではなく、すぐに再起動するために特定のジョブを対象とすることができます。

+0

@ Deanあなたのジョブを呼び出すために使用したコードSIを通して? –

+0

残念ながら、現時点では独自のコードですが、実際にはコードのいくつかのプロジェクト固有の部分をクリーンアップしているので、コミュニティと共有することができます。うまくいけば2〜3ヶ月以内です。 –

関連する問題