日期:2014-05-20  浏览次数:20579 次

关于spring定时器的问题
下面是我配置的定时器,我想数据库中的数据执行一遍后,关闭这个定时器,如果有新的数据再开启定时器,应该怎么办呢?

<bean id="huoQuDingXin"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="dingXin001Action" />
<property name="targetMethod" value="huoQu" />
<property name="concurrent" value="false" />
</bean>

<bean id="huoQuDingXinger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="huoQuDingXin" />
<property name="startDelay" value="10000" />
<property name="repeatInterval" value="3000" />
</bean>
------解决方案--------------------
这样设计 就违背的定时器的 用意了呀。
定时器,顾名思义是:根据时间,周期性执行。
根据你的需求  ,明显是触发器的条件呀。 
------解决方案--------------------
引用:
这样设计 就违背的定时器的 用意了呀。
定时器,顾名思义是:根据时间,周期性执行。
根据你的需求  ,明显是触发器的条件呀。

同意
------解决方案--------------------
LZ这思路就已经违背了定时器的含义了。

如果没有符合你数据的定时,也的开着。。这样也不会太多影响性能问题!
------解决方案--------------------
引用:
是这样啊,可是我数据库中的数据不多的时候,他就会重复执行这个代码,会造成重复数据的,这个问题该怎么解决呢

你没说你的需求呀,根据你提问的内容,我猜想:你有个任务表,初始的时候有值,任务需要执行,后面有可能继续往这张任务表中添加新任务。而且任务执行一次就可以了。

如果是这样的话, 我建议 不要用定时器, 要用触发器。
1、
你可以查一下 init  程序 启动加载运行一遍 你的任务方法,然后 触发器,当添加任务被执行时,你就执行一下你的方法 。
2、
使用中间表+定时器
定时器 就不用说了,解决的是  每天固定时间  执行 任务列表中的任务。中间表 :标记哪些没执行,或哪些执行了,(主要是负责告诉任务器,应该执行哪些任务) 这次任务的时候结束后,中间表就可以清空了。 
或者 你的表中添加字段,用来标记哪些执行完了,就不执行了,当你的任务执行过了,就要及时改变状态。