使用石英+弹簧的动态cron作业

时间:2014-04-02 09:19:51

标签: java spring cron quartz-scheduler

我想用石英+弹簧计划一个cron-job。

<context:component-scan base-package="com.hotelscrapper" /> <!--hotelServiceImpl-->
<bean id="ScheduleScrapJob" class="com.hotelscrapper.util.ScheduleScrapJob">
<property name="hotelService" ref="hotelServiceImpl">
</property>
</bean>

public class ScheduleScrapJob extends QuartzJobBean {
private HotelService hotelService;
public void setHotelService(HotelService hotelService){
    this.hotelService = hotelService;
}   
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
    hotelService.reScrapWorker();
}

}

hotelService为空。我不明白我如何将hotelService链接到服务 hotelServiceImpl

解决方案: hotelService是静态的。它工作正常。

2 个答案:

答案 0 :(得分:0)

如果您使用组件扫描,则必须在类中添加必要的注释:

@Component
public class ScheduleScrapJob extends QuartzJobBean {
  @Autowired
  private HotelService hotelService;

  @Override
  protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
    hotelService.reScrapWorker();
  }

}

使用此设置,您不需要ScheduleScrapJob类中的酒店服务设置器,您的xml配置将只是:

<context:component-scan base-package="com.hotelscrapper" />

这假设您需要扫描的所有类都在com.hotelscrapper下的包树中。

答案 1 :(得分:0)

你需要定义这样的东西:

<bean id="hotelServiceImpl" class="com.hotelscrapper.HotelServiceImpl">
  <!-- some properties here -->
</bean>

正如您在ref="hotelServiceImpl" bean定义中ScheduleScrapJob所做的那样,Spring将使用另一个hotelServiceImpl bean并将其设置为您的ScheduleScrapJob bean,尤其是它的hotelService属性。