这是在调度程序中运行进程的最佳方式。我可以使用 crontab 或 Spring-Batch。还有其他更好的选择吗?
5 回答
Quartz 是一个功能齐全的开源作业调度系统,可以与几乎任何 J2EE 或 J2SE 应用程序集成或一起使用——从最小的独立应用程序到最大的电子商务系统。Quartz 可用于创建简单或复杂的调度,以执行数十、数百甚至数万个作业;任务被定义为标准 Java 组件或 EJB 的作业。Quartz Scheduler 包括许多企业级功能,例如 JTA 事务和集群。
如果您想在一个 VM 中安排任务,还可以查看 Quartz。
如果你想定期做一些事情作为一个单独的过程,我会选择 crontab。
我认为 crontab 是合理的。它也是用于商业目的的成熟程序。
其他具有 GUI 任务创建功能的调度程序是 MAESTRO。您还可以生成一些用于自动化的配置文件。
Spring + Quartz 比 Spring Batch 更容易设置。但这取决于您的应用程序。
http://static.springsource.org/spring/docs/2.5.x/reference/scheduling.html
使用 Spring + Quartz,您可以定义一个 MethodInvokingJobDetailFactoryBean 来安排对 bean(存在于您的应用程序上下文中)的方法调用。
在此示例中 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>
试试 TimeMachine 调度器
https://bitbucket.org/saltnlight5/timemachine-scheduler/wiki/Home