使用Spring自带的quartz定时器,配置如下:<bean name="hotelLabelList" class="cn.o.hotel.task.HotelLabelTask" /><bean id="imageListJob"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="imageList" />
  <property name="targetMethod" value="getHotelImageList" />
  <property name="concurrent" value="true" />
</bean><bean id="imageListsTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
  <property name="jobDetail" ref="imageListJob" />
  <property name="cronExpression" value="0 0/2 * * * ? " />
</bean><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
    <list>
      <ref bean="imageListsTrigger"/>
    </list>
   </property>
</bean>
java代码:         @Resource(name="hotelService")
private HotelService hotelService;

public void getHotelImageList() throws Exception {
System.out.println("start imageList");                  //查询酒店,返回指定条数的酒店List
List<HotelInfo> list = hotelService.listHotelInfosBysize(50);

System.out.println("==============start==================");
if(null != list){
for(HotelInfo info : list){
if(!info.isGrapImage()){
hotelImageList(info, 1);
}
}
}
System.out.println("================end===========");
}查询酒店信息表,这个表中的数据大概有2W多条,使用的是mysql数据库,现在的问题是:当酒店查询size过大,list不返回,下面的代码也不执行;size设置比较小,进入该方法时,能够执行list查询以下的代码,第二次进入方法,则出现前面的现象。现在我不知道是list不能存储大数据还是定时器的问题,请大侠指教。。(注意下面方法的注释1)
查询方法:         @Override
@Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
public List<HotelInfo> listHotelInfosBysize(int size) {
Criteria crta = this.hotelInfoDao.createCriteria();
crta.add(Restrictions.eq("grapImage", false));
if(size>0){
crta.setMaxResults(size);
}
List<HotelInfo> list = crta.list();//注释1、这里没有返回值,好像卡死在这里。。
return list;
}

解决方案 »

  1.   

    int size 值是不是太大了。给小点试试
    既然分页了,干嘛一次取那么多数据。
      

  2.   

      才两万条数据、在说了、你也只是查询50条而已、就算在慢也应该没有多大问题!
     可以考虑下、在sql方面做优化、用原生态sql!
    也可以把定时的频率调低一点、两分钟一次、有点频繁了呢!
      

  3.   

    我把size的值设置为5还是出现第二种情况。
      

  4.   


    select * from hotel_info where grapImage=false limit 50;