一个图书管理系统,要判断一个用户借书是否超过一个月,如果超过就提醒他
这个判断用户借书超过一个月有什么好一点的实现方法?
前提:
不能每一个用户操作都来一次判断
最好是每天都定时判断所有用户借书信息一次。(过期的改DB)
听说能用一个后台的线程来实现,就是具体不知道怎么样实现
请大家多多赐教
这个判断用户借书超过一个月有什么好一点的实现方法?
前提:
不能每一个用户操作都来一次判断
最好是每天都定时判断所有用户借书信息一次。(过期的改DB)
听说能用一个后台的线程来实现,就是具体不知道怎么样实现
请大家多多赐教
然后提醒他们
private static boolean isRunning=false;
private static Logger logger = Logger.getLogger(ServerTask.class.getName());
public void run(){
if(!isRunning){
isRunning=true;
logger.info("任务开始启动……!");
AutoServerService autoService= new AutoServerService();
autoService.autoFinishMechanism();
logger.info("任务执行结束!");
isRunning=false;
}else{
logger.info("上次任务尚未完成!!");
}
}
}
public class TaskManager implements ServletContextListener { public static final long PERIOD_DAY = Globals.MILLIS_IN_DAY;//每天的毫秒数 public static final long PERIOD_WEEK = PERIOD_DAY * 7;//一周内的毫秒数 public static final long NO_DELAY = 0;//无延迟 private Timer timer;//定时器 public TaskManager() {
} /**
* 在Web应用结束时停止任务
* @param event ServletContextEvent
*/
public void contextDestroyed(ServletContextEvent event) {
timer.cancel(); // 定时器销毁
} /**
* 在Web应用启动时初始化任务
* @param event ServletContextEvent
*/
public void contextInitialized(ServletContextEvent event) {
timer = new Timer("自动发送短信消息任务",true); //定义定时器
// timer.schedule(new ServerTask(),NO_DELAY, 1000 * 120);//启动任务(每两分种一次)
// timer.schedule(new ServerTask(),NO_DELAY, 1000 * 1200);//启动任务(每二十分种一次)
timer.schedule(new ServerTask(),NO_DELAY, 1000 * 3600);//启动任务(每小时一次)
// timer.schedule(new ServerTask(),NO_DELAY, 1000 * PERIOD_DAY);//启动任务(每天一次)
// timer.schedule(new ServerTask(),NO_DELAY, 1000 * PERIOD_WEEK);//启动任务(每周一次)
// timer.schedule(new ServerTask(),NO_DELAY, 1000 * PERIOD_WEEK * 4);//启动任务(每4周(月)一次) }
}
如果设“某个用户操作”为条件的话
一定导致每个用户做操作都会引起“触发”执行
不知道我有没有会错意,请高手指点定时器我到是会用,就是不知道能不能在web服务器启动时就让这个定时器自动启动起来(不用客户端发送http请求来触发)
因为觉得这样的话,程序耦合得更低一点。(不知我问的是不是很简单的东西,我就是想不到到底应该怎么做)