Java web 初始化操作

今天在工作中遇到这样一个问题,我的项目存在一个自己写的单点登录的功能,实现的方式是数据库中存在一个字段表示登录状态,当用户登录和退出时,会触发修改这个字段的操作。问题就出在这里,当用户登录后,程序意外停止,或者是我在调试的过程中重启服务,该字段会一直是登录中,那么有没有相关的解决方案呢?

我的想法是在项目第一次运行的时候,进行以尝更新操作,将所有用户的登录状态全部改变,既然想到了,那就去实现它吧。

一、在 web.xml 中配置监听器

这里是初始化时调用的类

二、编写初始化时调用的类,该类需要继承自 ServletContextListener

这里需要实现它的两个方法,contextInitialized 和 contextDestoryed

通过名字,我们可以知道,contextInitialized 是项目初始化时调用的方法,而 contextDestoryed 是项目关闭时调用的方法,那么目标很明确,我直需要在 contextInitialized 编写我的业务逻辑就可以了。

PS:为什么我不使用 contextDestoryed 来进行这个功能的实现呢?比方说项目要关闭了,我就把所有的用户登录状态给重置了,这样一来,还可以加快项目的启动速度,何乐而不为呢?

这里需要注意的是,这个方法只有在容器正常停止的过程中才会调用,比如在任务管理器或者使用 kill 命令把进程杀掉,就不会调用到这个方法,也就为程序埋藏了一个 bug,这里就不如 contextInitialized 更容易被控制了,所以选择在程序的初始化过程中进行操作。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180509G22FRT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券