「已注销」 2018-10-18 10:21 采纳率: 0%
浏览 6080
已结题

多个定时任务同时执行一个job类,怎么确保执行的数据不重复;

数据库中有100条数据,在一个配置文件里面,配置了10个定时任务,但是走的job类是同 一个,在启动项目的时候,如何确保这同时跑的10个定时任务,不重复读取一条数据或者重复读取相同的几条数据,防止修改一条数据的时候,别的定时任务已经执行完成,这就造成了数据库重复添加数据; (加锁是不可能得因为造成死锁。)

            配置文件如下
            <?xml version="1.0" encoding="UTF-8"?>

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="lastNum0" class="org.quartz.JobDataMap">
    <constructor-arg>
        <map>
            <entry key="lastNum" value="0" />
        </map>
    </constructor-arg>
</bean>
<bean id="lastNum1" class="org.quartz.JobDataMap">
    <constructor-arg>
        <map>
            <entry key="lastNum" value="1" />
        </map>
    </constructor-arg>
</bean>
<bean id="lastNum2" class="org.quartz.JobDataMap">
    <constructor-arg>
        <map>
            <entry key="lastNum" value="2" />
        </map>
    </constructor-arg>
</bean>
<bean id="lastNum3" class="org.quartz.JobDataMap">
    <constructor-arg>
        <map>
            <entry key="lastNum" value="3" />
        </map>
    </constructor-arg>
</bean>
<bean id="lastNum4" class="org.quartz.JobDataMap">
    <constructor-arg>
        <map>
            <entry key="lastNum" value="4" />
        </map>
    </constructor-arg>
</bean>
<bean id="lastNum5" class="org.quartz.JobDataMap">
    <constructor-arg>
        <map>
            <entry key="lastNum" value="5" />
        </map>
    </constructor-arg>
</bean>
<bean id="lastNum6" class="org.quartz.JobDataMap">
    <constructor-arg>
        <map>
            <entry key="lastNum" value="6" />
        </map>
    </constructor-arg>
</bean>
<bean id="lastNum7" class="org.quartz.JobDataMap">
    <constructor-arg>
        <map>
            <entry key="lastNum" value="7" />
        </map>
    </constructor-arg>
</bean>
<bean id="lastNum8" class="org.quartz.JobDataMap">
    <constructor-arg>
        <map>
            <entry key="lastNum" value="8" />
        </map>
    </constructor-arg>
</bean>
<bean id="lastNum9" class="org.quartz.JobDataMap">
    <constructor-arg>
        <map>
            <entry key="lastNum" value="9" />
        </map>
    </constructor-arg>
</bean>
<bean id="policyQuartzServiceImpl" class="cn.com.sinosoft.clarify.business.service.impl.quartz.PolicyQuartzServiceImpl"/>

<!--<bean id="PolicyJob0" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass" valcn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_22ller"></property>
    <property name="jobDataMap">
        <ref bean="lastNum0"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-rpolicyQuartzServiceImplImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob1"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              valcn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_22ller"></property>
    <property name="jobDataMap">
        <ref bean="lastNum1"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-rpolicyQuartzServiceImplImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob2"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              valcn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_22ller"></property>
    <property name="jobDataMap">
        <ref bean="lastNum2"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-rpolicyQuartzServiceImplImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob3"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              valcn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_22ller"></property>
    <property name="jobDataMap">
        <ref bean="lastNum3"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-rpolicyQuartzServiceImplImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob4"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              valcn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_22ller"></property>
    <property name="jobDataMap">
        <ref bean="lastNum4"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-rpolicyQuartzServiceImplImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob5"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              valcn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_22ller"></property>
    <property name="jobDataMap">
        <ref bean="lastNum5"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-rpolicyQuartzServiceImplImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob6"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              valcn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_22ller"></property>
    <property name="jobDataMap">
        <ref bean="lastNum6"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-rpolicyQuartzServiceImplImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob7"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              valcn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_22ller"></property>
    <property name="jobDataMap">
        <ref bean="lastNum7"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-rpolicyQuartzServiceImplImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob8"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              valcn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_22ller"></property>
    <property name="jobDataMap">
        <ref bean="lastNum8"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-rpolicyQuartzServiceImplImpl"></entry>
        </map>
    </property>
</bean>

<bean id="PolicyJob9"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              valcn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_22ller"></property>
    <property name="jobDataMap">
        <ref bean="lastNum9"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-rpolicyQuartzServiceImplImpl"></entry>
        </map>
    </property>
</bean>-->
<bean id="PolicyJob10"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              value="cn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_1"></property>
    <property name="jobDataMap">
        <ref bean="lastNum0"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-ref="policyQuartzServiceImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob11"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              value="cn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_1"></property>
    <property name="jobDataMap">
        <ref bean="lastNum1"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-ref="policyQuartzServiceImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob12"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              value="cn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_1"></property>
    <property name="jobDataMap">
        <ref bean="lastNum2"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-ref="policyQuartzServiceImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob13"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              value="cn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_1"></property>
    <property name="jobDataMap">
        <ref bean="lastNum3"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-ref="policyQuartzServiceImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob14"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              value="cn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_1"></property>
    <property name="jobDataMap">
        <ref bean="lastNum4"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-ref="policyQuartzServiceImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob15"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              value="cn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_1"></property>
    <property name="jobDataMap">
        <ref bean="lastNum5"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-ref="policyQuartzServiceImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob16"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              value="cn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_1"></property>
    <property name="jobDataMap">
        <ref bean="lastNum6"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-ref="policyQuartzServiceImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob17"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              value="cn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_1"></property>
    <property name="jobDataMap">
        <ref bean="lastNum7"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-ref="policyQuartzServiceImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob18"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              value="cn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_1"></property>
    <property name="jobDataMap">
        <ref bean="lastNum8"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-ref="policyQuartzServiceImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyJob19"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass"
              value="cn.com.sinosoft.clarify.dispatch.quartzJob.PolicyQuartzJob_1"></property>
    <property name="jobDataMap">
        <ref bean="lastNum9"></ref>
    </property>
    <property name="jobDataAsMap">
        <map>
            <entry key="policyQuartzServiceimpl" value-ref="policyQuartzServiceImpl"></entry>
        </map>
    </property>
</bean>
<bean id="PolicyDateBean10" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="PolicyJob10"></property>
    <property name="cronExpression" value="0/1 * * * * ?"></property>
</bean>
<bean id="PolicyDateBean11" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="PolicyJob11"></property>
    <property name="cronExpression" value="0/1 * * * * ?"></property>
</bean>
<bean id="PolicyDateBean12" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="PolicyJob12"></property>
    <property name="cronExpression" value="0/1 * * * * ?"></property>
</bean>
<bean id="PolicyDateBean13" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="PolicyJob13"></property>
    <property name="cronExpression" value="0/1 * * * * ?"></property>
</bean>
<bean id="PolicyDateBean14" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="PolicyJob14"></property>
    <property name="cronExpression" value="0/1 * * * * ?"></property>
</bean>
<bean id="PolicyDateBean15" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="PolicyJob15"></property>
    <property name="cronExpression" value="0/1 * * * * ?"></property>
</bean>
<bean id="PolicyDateBean16" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="PolicyJob16"></property>
    <property name="cronExpression" value="0/1 * * * * ?"></property>
</bean>
<bean id="PolicyDateBean17" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="PolicyJob17"></property>
    <property name="cronExpression" value="0/1 * * * * ?"></property>
</bean>
<bean id="PolicyDateBean18" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="PolicyJob18"></property>
    <property name="cronExpression" value="0/1 * * * * ?"></property>
</bean>
<bean id="PolicyDateBean19" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="PolicyJob19"></property>
    <property name="cronExpression" value="0/1 * * * * ?"></property>
</bean>
<bean  class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="true" autowire="no">
    <property name="triggers">
        <list>
            <ref bean="PolicyDateBean10" />
            <ref bean="PolicyDateBean11" />
            <ref bean="PolicyDateBean12" />
            <ref bean="PolicyDateBean13" />
            <ref bean="PolicyDateBean14" />
            <ref bean="PolicyDateBean15" />
            <ref bean="PolicyDateBean16" />
            <ref bean="PolicyDateBean17" />
            <ref bean="PolicyDateBean18" />
            <ref bean="PolicyDateBean19" />
        </list>
    </property>
    <property name="configLocation" value="classpath:/quartz/quartz.properties" />
    <!--<property name="autoStartup" value="true" />-->
</bean>

  • 写回答

3条回答 默认 最新

  • 艾德 2018-10-18 13:01
    关注

    可以用数据库悲观锁,取10条没处理过的数据,select * from table where status=0 for update,取出10条同时锁住这10条

    其实不建议启10个timer,应该是启一个timer,取出数据后分配线程来处理。

    另外,用注解启timer了解一下,比写xml优雅点

    评论

报告相同问题?

悬赏问题

  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条