多个定时任务同时执行一个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>

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

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

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

个人见解:数据库对应记录加锁,或者采用中间件将数据进行缓存处理一下,比如通过阻塞队列,进行处理。

100条数据,10个定时任务跑对吧,你10个定时任务就是10个对象。
你把100 条数据划分为10块,每块10条数据(可以以Id划分。1-10;11-20。。。。)不行么?