import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Timer;
import java.util.TimerTask;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.gmcc.kuchuan.dao.DBConnectionManager;
/**
* 定时检测用户在线状态
* @author Join
*
*/
public class UserUpdTimerTask {
private Log logger = LogFactory.getLog(UserUpdTimerTask.class);
private Timer timer;
public UserUpdTimerTask() {
timer = new Timer();
timer.schedule(new RemindTask(), 0, // initial delay
5 * 60 * 1000); // subsequent rate 5分钟1次
logger.debug("UserUpdTimerTask is Started");
}
class RemindTask extends TimerTask {
public void run() {
//定时更新用户状态(是否在线)
boolean ret = updUserOnLineStatus();
if(ret){
logger.debug("UserUpdTimerTask. Timing detection users online status. UserUpdTimerTask update success!");
}else{
logger.error("UserUpdTimerTask. Timing detection users online status. UserUpdTimerTask update fail!");
}
// System.exit(0);
}
}
/**
* 更新用户在线状态:超过5分钟更新为离线
*/
public boolean updUserOnLineStatus(){
boolean ret = false;
Connection conn = DBConnectionManager.getInstance().getConnection();
String sql = "update user_detail set online_flag=? "
+ " where unix_timestamp(now()) "
+ " not between unix_timestamp(last_login) and unix_timestamp(last_login+ INTERVAL 5 MINUTE)";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "0");
pstmt.executeUpdate();
pstmt.close();
ret = true;
} catch (SQLException e) {
logger.error("UserUpdTimerTask update fail.", e);
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return ret;
}
public static void main(String[] args) {
new UserUpdTimerTask();
}
}
定时器TimerTask:定时检测用户在线状态
最新推荐文章于 2023-07-30 16:48:00 发布