Spring Batch:仅用于消防服务

时间:2014-12-22 15:24:14

标签: java spring quartz-scheduler spring-batch

我目前有多个Quartz轮询器检查数据库中的多个标志,如果flags为true则触发服务,我还有一个弹簧批处理项目读取文件,然后调用服务来相应地更新信息。

我想知道的是,是否有可能让春季批量应用程序只需要调用服务5分钟(不要检查任何信息只是调用一个服务来处理所有业务逻辑)这样我就可以删除从我的应用程序中的Quartz作业我的所有工作都在一个地方(春季批处理项目)?

如果是这样,任何人都可以指出如何做到这一点的正确方向,因为我在网上找不到任何东西来设置弹出批处理作业只是为了解雇服务?

1 个答案:

答案 0 :(得分:0)

您可以简单地安排Quartz作业,并从您的schedular类的executeInternal方法调用您的服务。您将无法直接在计划类中自动装配您的服务,因此您需要使用jobDataas Map进行设置。

   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

    <property name="triggers">
        <list>
            <bean id="cronTriggerCache"
                class="org.springframework.scheduling.quartz.CronTriggerBean">
                <property name="jobDetail" ref="exampleJob" />
                <property name="cronExpression" value="your cron expression" />
            </bean>
</list>
</bean>    
 <bean name="exampleJob"       class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="example.ExampleJob"/>
<property name="jobDataAsMap">
    <map>
        <entry key="myService" ref="myService"/>
    </map>
</property>
</bean>

 package example;

 public class ExampleJob extends QuartzJobBean {

private myService myService;

/**
 * have getter setter for you service
 * 
 */


protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException {
    // do the actual work
     //call your service method here
}

}