TimerTask执行时间太长,怎么处理

时间:2022-08-01 21:30:28
现在的情况是使用Timer和TimerTask每天定时执行一次数据库操作,导一些数据。如果操作死掉的话,此次任务结束不了。想请教大家怎样设置一个时间,比如10分钟,如果超过10分钟了,就放弃本次任务,回滚数据库。

16 个解决方案

#1


那你要是任务量总是超过10分钟呢? Task就不做了吗?

唯一的办法就是把大任务划分为若干个小任务。~

#2


#3


在数据库上建个作业来执行呢?里面能设置计划,成功失败时的步骤等,比较方便啊~

#4


引用 1 楼 healer_kx 的回复:
那你要是任务量总是超过10分钟呢? Task就不做了吗?

 唯一的办法就是把大任务划分为若干个小任务。~

限制一个相对大的时间,正常情况下都能执行完。特殊的话,直接停掉!

#5


我想问的是TimerTask能停掉正在运行的任务吗?我查了api说的是正在进行的任务不能停掉。

#6


T-bag,没有不能停止的线程。。。

#7


不知道你导数据的方式,如果使用JDBC的ResultSet或者其他类似方式,那么
while (rs.next() && !timeout)

#8


请教healer_kx!

#9


看看用 java.util.concurrent.ScheduledThreadPoolExecutor 这个呢?

#10


做个监视Timer,如果超时就把Job的那个Timer使用的Statement一类的东西给Close掉。Job的Timer里抓到异常就回滚。别关闭Connection,否则回滚不了。

#11


试一下楼上的方法。

#12


又见Tbag!
说说你这个Timer里面操作数据库都做了些什么啊?是存文件吗?
是哪个数据库?如果是oracle,可以看看Oracle JOB相关资料。
db2也支持计划任务。

ps:* Break 最喜欢TBAG

#13


引用 12 楼 crazylaa 的回复:
又见Tbag!
 说说你这个Timer里面操作数据库都做了些什么啊?是存文件吗?
 是哪个数据库?如果是oracle,可以看看Oracle JOB相关资料。
 db2也支持计划任务。

 ps:* Break 最喜欢TBAG

oracle,都是存储过程,从别的系统导数据,然后做一些计算

#14


如果是存储过程,你调用call.setQueryTimeout就可以让它超时断开了

#15


线程...看门狗....
监视线程

#16


引用 15 楼 xblue3 的回复:
线程...看门狗....
 监视线程

监视线程怎样停掉主线程?

#1


那你要是任务量总是超过10分钟呢? Task就不做了吗?

唯一的办法就是把大任务划分为若干个小任务。~

#2


#3


在数据库上建个作业来执行呢?里面能设置计划,成功失败时的步骤等,比较方便啊~

#4


引用 1 楼 healer_kx 的回复:
那你要是任务量总是超过10分钟呢? Task就不做了吗?

 唯一的办法就是把大任务划分为若干个小任务。~

限制一个相对大的时间,正常情况下都能执行完。特殊的话,直接停掉!

#5


我想问的是TimerTask能停掉正在运行的任务吗?我查了api说的是正在进行的任务不能停掉。

#6


T-bag,没有不能停止的线程。。。

#7


不知道你导数据的方式,如果使用JDBC的ResultSet或者其他类似方式,那么
while (rs.next() && !timeout)

#8


请教healer_kx!

#9


看看用 java.util.concurrent.ScheduledThreadPoolExecutor 这个呢?

#10


做个监视Timer,如果超时就把Job的那个Timer使用的Statement一类的东西给Close掉。Job的Timer里抓到异常就回滚。别关闭Connection,否则回滚不了。

#11


试一下楼上的方法。

#12


又见Tbag!
说说你这个Timer里面操作数据库都做了些什么啊?是存文件吗?
是哪个数据库?如果是oracle,可以看看Oracle JOB相关资料。
db2也支持计划任务。

ps:* Break 最喜欢TBAG

#13


引用 12 楼 crazylaa 的回复:
又见Tbag!
 说说你这个Timer里面操作数据库都做了些什么啊?是存文件吗?
 是哪个数据库?如果是oracle,可以看看Oracle JOB相关资料。
 db2也支持计划任务。

 ps:* Break 最喜欢TBAG

oracle,都是存储过程,从别的系统导数据,然后做一些计算

#14


如果是存储过程,你调用call.setQueryTimeout就可以让它超时断开了

#15


线程...看门狗....
监视线程

#16


引用 15 楼 xblue3 的回复:
线程...看门狗....
 监视线程

监视线程怎样停掉主线程?