首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

spring定时器有关问题

2012-05-10 
spring定时器问题使用Spring自带的quartz定时器,配置如下:XML codebean namehotelLabelList classcn

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次、运行过程!

热点排行