2016-08-10 5 views
0

私はSpringブートMVCとバッチアプリケーションを持っています。バッチとMVCの両方がDAOとサービスのレイヤーを共有しているため、それらは同じWARファイルにあります。それらは4つのクラウドサーバーに展開され、UIアプリケーション用に構成された負荷分散とvipがあります。したがって、MVCアプリケーションは問題ありません。バッチを1台のサーバで実行する

問題はバッチの一部として、私は外部サーバーへのファイルのFTPを行い、その外部サーバーは処理されたファイルをFTPに戻します。処理されたファイルは、4台のサーバーのうちの1台にのみ戻されます。だから、バッチを1台のサーバでのみ実行したい。他のサーバーでバッチが実行されないようにするにはどうすればよいですか。

答えて

0

4つの異なるクラウドサーバーで4つのインスタンスが実行されているため、ソリューションが簡単になります。バッチの開始点はファイルポーラーにすることができます。したがって、ファイルがサーバー1のポーリングされたディレクトリーにドロップされると、サーバー1のバッチ・ジョブが呼び出されます。そのサーバーにファイルがドロップされていないため、他のインスタンスは何もしません。

スプリングバッチの前にファイルポーラーを統合する必要があります。このような何か - http://docs.spring.io/spring-batch/reference/html/springBatchIntegration.html

<int:channel id="inboundFileChannel"/> 
<int:channel id="outboundJobRequestChannel"/> 
<int:channel id="jobLaunchReplyChannel"/> 

<int-file:inbound-channel-adapter id="filePoller" 
channel="inboundFileChannel" 
directory="file:/tmp/myfiles/" 
filename-pattern="*.csv"> 
<int:poller fixed-rate="1000"/> 
</int-file:inbound-channel-adapter> 

<int:transformer input-channel="inboundFileChannel" 
output-channel="outboundJobRequestChannel">. <bean class="io.spring.sbi.FileMessageToJobRequest"> 
<property name="job" ref="personJob"/> 
<property name="fileParameterName" value="input.file.name"/> 
</bean> 
</int:transformer> 

<batch-int:job-launching-gateway request-channel="outboundJobRequestChannel" 
reply-channel="jobLaunchReplyChannel"/> 

0

これは、多くのアプローチのいずれかになりますが、達成する方法は、プロパティファイル内の値を保持し、設定され、それは本当の

をブール値に対する値ですが今プロパティファイルの値がtrueの場合にのみ実行するようにあなたのバッチを処理します。

これにより、バッチジョブを処理するサーバーを柔軟に変更できます。

関連する問題