スケジューラでプロセスを実行する最良の方法はどれですか。crontab または Spring-Batch で実行できます。他のより良いオプションはありますか?
5 に答える
Quartz は、最小のスタンドアロン アプリケーションから最大の e コマース システムまで、ほぼすべての J2EE または J2SE アプリケーションと統合したり、一緒に使用したりできる、フル機能のオープン ソース ジョブ スケジューリング システムです。Quartz を使用して、数万、数百、さらには数万のジョブを実行するための単純または複雑なスケジュールを作成できます。タスクが標準の Java コンポーネントまたは EJB として定義されているジョブ。Quartz Scheduler には、JTA トランザクションやクラスタリングなど、多くのエンタープライズ クラスの機能が含まれています。
1 つの VM でタスクをスケジュールする場合は、Quartz を参照することもできます。
別のプロセスとして定期的に何かを行いたい場合は、crontab を使用します。
TimeMachineスケジューラーを試す
https://bitbucket.org/saltnlight5/timemachine-scheduler/wiki/Home
crontab は合理的だと思います。商用目的でも使用される成熟したプログラムです。
GUI タスク作成機能を備えた他のスケジューラーは MAESTRO です。自動化のためにいくつかの構成ファイルを生成することもできます。
Spring + Quartz は、Spring Batch よりもセットアップがはるかに簡単です。しかし、それはあなたのアプリケーションに依存します。
http://static.springsource.org/spring/docs/2.5.x/reference/scheduling.html
Spring + Quartz を使用すると、Bean (アプリケーションコンテキストに存在する) でメソッド呼び出しをスケジュールする MethodInvokingJobDetailFactoryBean を定義できます。
この例では、orderService.cancelNotPaidOrders() が 30 分ごとに呼び出されます。
<bean id="cancelExpiredOrders" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetBeanName" value="orderService"/>
<property name="targetMethod" value="cancelNotPaidOrders"/>
<property name="concurrent" value="false" />
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="cancelExpiredOrders" />
<property name="startDelay" value="10000" />
<property name="repeatInterval" value="1800000" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>