scheduler的Spring配置如下:
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref local="cronTriggerA"/>
            <ref local="cronTriggerB"/>
        </list>
    </property>
<property name="startupDelay" value="60" />
<property name="schedulerContextAsMap">
<map>
<entry key="timeout" value="30" />
</map>
</property>
    <property name="quartzProperties">
        <props>
            <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
            <prop key="org.quartz.threadPool.threadCount">20</prop>
        </props>
    </property>
</bean>
其中cronTriggerA任务会通过Hibernate访问数据源dataSourceA,cronTriggerB任务会通过Hibernate访问数据源dataSourceB,cronTriggerA任务始终正常执行,但是cronTriggerB任务每次启动工程之后只执行4次并且每次固定都是执行4次,然后就不再执行,我将A任务去掉只保留B任务,问题依旧,我把B任务中通过Hibernate访问数据库的代码去掉,就没有问题了(仅保留查询数据库的代码也问题依旧),看来问题在访问数据库的地方,但是始终找不到根本原因,也没解决问题,求助各位达人~~

解决方案 »

  1.   

    连接始终是打开的,如果是数据库连接被关闭了,必然会报错,但是现在的问题是根本不去执行那个任务的方法,没有任何报错,我在任务方法的第一行System.out.println()的日志都没打
      

  2.   

    是oracle数据库吗? 
    当执行到不动的时候查看一下你的空用户的连接数.如果连接数达到超过你连接池或hibernate配置的最大连接数,那肯定是某些session打开了没释放.
      

  3.   

    数据库是mysql
    问题不是执行到不动,而是每次执行都执行完了,但是4次执行之后,就不再执行,任务方法第一行打日志的都不执行
      

  4.   

    任务配置如下:
    <bean id="jobDetailB"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="jobServiceB" />
        <property name="targetMethod" value="job" />
        <property name="concurrent" value="false" />
    </bean><bean id="cronTriggerB"
        class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobDetailB" />
        <property name="cronExpression" value="0/30 * * * * ?" /><!-- 每30秒 -->
    </bean>现在的问题是jobServiceB的job()方法,前4次都全部执行完毕,正常,但在执行4次之后连第一行代码都不再执行
      

  5.   

    那可能你还没执行完一个任务就又开始了下一个任务,这样越积越多,让quartz的线程数达到了纯种池的规定值.
    你把访问数据库的代码替换成Thread.sleep(n),这个n设得足够大,看看是不是照样执行4次就挂掉了,如果不是,很可能和你的数据库有关.
      

  6.   

    我狂晕,我要狂暴了,找到问题所在了:
    居然是因为我查询mysql数据库是分页查询,我改成一次性查询出所有要的数据,就没问题了!这个也太扯了!
      

  7.   

    顶你这句话,我现在急着五一之前把东西做出来,这是最后一个问题了,先把问题解决了,我再慢慢分析原因
    改成一次性查询并不是根本解决之道,还好我这个业务一次性查数据量也不大,万一什么时候碰到一个数据量很大必须分页查的功能,岂不是玩完了?
    分页查询为什么会导致多次执行之后quartz任务会中止呢?
      

  8.   

    查询结果为0,数据库没数据,只是查询方式为分页查询,并且分页查询之前会查询总数,count一下
      

  9.   

    我解决了。不是每次都openSession..要用 getCurrentSession