spring定时器问题
使用Spring自带的quartz定时器,配置如下:
- XML code
<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代码:
- Java code
@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)
查询方法:
- Java code
@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; }
[解决办法]
int size 值是不是太大了。给小点试试
既然分页了,干嘛一次取那么多数据。
[解决办法]
才两万条数据、在说了、你也只是查询50条而已、就算在慢也应该没有多大问题!
可以考虑下、在sql方面做优化、用原生态sql!
也可以把定时的频率调低一点、两分钟一次、有点频繁了呢!
[解决办法]
你打个短点逐步跟踪一下、看看第2次、运行过程!