返回信息流在系统中加了个天气预报的模块,通过一个监听器,每天8点和16点从新浪获取天气。
但是系统运行一段时间后,监听器就失效了,异常我都捕获了,应该不是由于异常退出导致的失效。请问大家有碰到过这种问题吗?谢谢。
这是一条镜像帖。来源:北邮人论坛 / java / #26094同步于 2013/6/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
请教java web listener失效的问题
xiaogangzgg
2013/6/27镜像同步21 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
什么是监听器?
如何从新浪获取天气?
你是怎么做到让你的某段代码在8点和16点运行的?
一段时间大概是多长时间?
什么是失效?安静地不工作了?还是出现异常了?
你捕获了异常,异常是什么?
什么是监听器?
---
用的是:ServletContextListener
如何从新浪获取天气?
---
通过新浪的接口
你是怎么做到让你的某段代码在8点和16点运行的?
---
监听器里有一个定时任务,每天8点和16点都会去获取
一次天气数据
一段时间大概是多长时间?
---
这个不确定,碰到过两次了,应该是一两个月?
什么是失效?安静地不工作了?还是出现异常了
---
就是定时任务不执行了,不去获取天气数据了。
查看日志,应该是定时任务不工作了。
你捕获了异常,异常是什么?
---
我就catch了一下Exception
ps:你好活跃啊,Linux版里你也回复我的帖子了。
【 在 nuanyangyang 的大作中提到: 】
: 什么是监听器?
: 如何从新浪获取天气?
: 你是怎么做到让你的某段代码在8点和16点运行的?
: ...................
是的,现在就是这个定时任务过一段时间就再也不执行了,只能重装启动程序。
【 在 a789asd456fg 的大作中提到: 】
: 这个是容器启动监听器吧,起来后是不是要触发个定时任务
你是怎么做到让你的某段代码在8点和16点运行的?
---
监听器里有一个定时任务,每天8点和16点都会去获取一次天气数据
===
请详细介绍一下你使用了什么机制实现定时任务。比如,使用Timer,或者使用Spring的定时器,或者使用Quartz
什么是失效?安静地不工作了?还是出现异常了
---
就是定时任务不执行了,不去获取天气数据了。
查看日志,应该是定时任务不工作了。
===
日志里有文字记录吗?你指的是定时任务没有工作,而没有留下任何记录吗?
你捕获了异常,异常是什么?
---
我就catch了一下Exception
===
1. 捕捉到异常了吗?打印出来的文字信息还有吗?
2. 秀一下你异常处理的代码。感觉这里容易出错。
【 在 xiaogangzgg 的大作中提到: 】
: 什么是监听器?
你是怎么做到让你的某段代码在8点和16点运行的?
---
监听器里有一个定时任务,每天8点和16点都会去获取一次天气数据
===
请详细介绍一下你使用了什么机制实现定时任务。比如,使用Timer,或者使用Spring的定时器,或者使用Quartz
使用的是最笨的Timer,然后设定两个计数器:count1,count2,在八点到下午四点之间count1++,下午四点之后count2++,在count1=1 or count2=1的时候执行获取天气的操作。
什么是失效?安静地不工作了?还是出现异常了
---
就是定时任务不执行了,不去获取天气数据了。
查看日志,应该是定时任务不工作了。
===
日志里有文字记录吗?你指的是定时任务没有工作,而没有留下任何记录吗?
###
定时任务代码:
public void run() {
try {
log.info("WeatherListener执行中...");
//…
//获取天气过程
catch(Exception e) {
log.info("更新数据库失败");
e.printStackTrace();
}
}
日志中就记录了WeatherListener执行中...(本来应该是执行一次定时任务就打印一遍这条记录,但是日志里后面就没打印这句了,说明定时任务后面就没执行了。)
但是日志里也并没有记录“更新数据库失败”
你捕获了异常,异常是什么?
---
我就catch了一下Exception
===
1. 捕捉到异常了吗?打印出来的文字信息还有吗?
2. 秀一下你异常处理的代码。感觉这里容易出错。
catch(Exception e) {
log.info("更新数据库失败");
e.printStackTrace();
}
没有捕获到异常
【 在 nuanyangyang 的大作中提到: 】
: 你是怎么做到让你的某段代码在8点和16点运行的?
什么是失效?安静地不工作了?还是出现异常了
---
就是定时任务不执行了,不去获取天气数据了。
查看日志,应该是定时任务不工作了。
===
日志里有文字记录吗?你指的是定时任务没有工作,而没有留下任何记录吗?
###
定时任务代码:
public void run() {
try {
log.info("WeatherListener执行中...");
//…
//获取天气过程
catch(Exception e) {
log.info("更新数据库失败");
e.printStackTrace();
}
}
日志中就记录了WeatherListener执行中...(本来应该是执行一次定时任务就打印一遍这条记录,但是日志里后面就没打印这句了,说明定时任务后面就没执行了。)
但是日志里也并没有记录“更新数据库失败”
===
确定这个run()函数返回了吗?有没有超时机制?
你用的是schedule()(固定延迟)还是scheduleAtFixedRate()(固定频率)?