千家信息网

Tomcat的Session持久化策略是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Tomcat的Session持久化策略是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。关于Tomcat的Session,我们都知道默
千家信息网最后更新 2026年11月01日Tomcat的Session持久化策略是什么

Tomcat的Session持久化策略是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

关于Tomcat的Session,我们都知道默认是保存在内存中。为了解决重启应用服务器Session丢失的问题,Tomcat内部的StandardManager会在正常的关闭时钝化活动的Session 并在重启的时候重新加载。

而Tomcat在StandardManager之外,还提供了对应持久化Session的Manager实现: PersistentManager,目前对应的有两种持久化的实现

  • FileStore

  • JDBCStore

分别是将活动的Session保存在磁盘上和保存到数据库中。

本次我们以FileStore为例,来分析下PersistentManager在Tomcat中的实现。

配置

PersistentManager的配置基本上是这样的:

      

对于FileStore和JDBCStore,基本配置都类似,有差异的只是Store中对应的具体属性,比如JDBCStore需要额外指定数据的用户名和密码等。上面的配置可以直接 用于FileStore。

其中,像maxIdleBackup、maxIdleSwap、minIdleSwap默认都是关闭的,默认值都是-1。当然,我们上面的配置是修改过的。默认的行为会和StandardManager一致,即在关闭重启时进行Session的钝化和解析。

而当按照我们上面的配置启动Tomcat后,服务器会根据maxIdleBackup的时间,以秒为单位,进行空闲Session的持久化。在配置的目录中,会生成以sessionId为文件名.session的文件

例如:5E62468BFF33CF7DE28464A76416B85E.session

主要参数说明:

  • saveOnRestart -当服务器关闭时,是否要将所有的session持久化;

  • maxActiveSessions - 可处于活动状态的session数;

  • minIdleSwap/maxIdleSwap -session处于不活动状态最短/长时间(s),sesson对象转移到File Store中;

  • maxIdleBackup -大于这一时间时,会将session备份。

写文件:

public void save(Session session) throws IOException {        // Open an output stream to the specified pathname, if any        File file = file(session.getIdInternal());        if (file == null) {            return;        }        if (manager.getContext().getLogger().isDebugEnabled()) {            manager.getContext().getLogger().debug(sm.getString(getStoreName() + ".saving",                             session.getIdInternal(), file.getAbsolutePath()));        }         try (FileOutputStream fos = new FileOutputStream(file.getAbsolutePath());                ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(fos))) {            ((StandardSession)session).writeObjectData(oos);        }    }

我们来看load操作,和StandardManager加载Session基本一致,先创建空的session,再readObjectData:

    public Session load(String id) {        File file = file(id);        Context context = getManager().getContext();        try (FileInputStream fis = new FileInputStream(file.getAbsolutePath());                ObjectInputStream ois = getObjectInputStream(fis)) {             StandardSession session = (StandardSession) manager.createEmptySession();            session.readObjectData(ois);            session.setManager(manager);            return session;        } catch (FileNotFoundException e) {            return null;        }    }

删除操作:

public void remove(String id) throws IOException {    File file = file(id);    file.delete();}

而这些load,remove等操作的触发点,就是我们之前提到过的后台线程:我们在前面分析过期的session是如何处理的时候,曾提到过,可以移步这里:对于过期的session,Tomcat做了什么?

都是使用backgroundProcess

public void backgroundProcess() {    count = (count + 1) % processExpiresFrequency;    if (count == 0)        processExpires();}

在PersistentManager的processExpires方法中,重点有以下几行

        processPersistenceChecks();        if (getStore() instanceof StoreBase) {            ((StoreBase) getStore()).processExpires();        }

其中在processPersistenceChecks中,就会对我们上面配置的几项进行检查,判断是否要进行session文件的持久化等操作

/** * Called by the background thread after active sessions have been checked * for expiration, to allow sessions to be swapped out, backed up, etc. */public void processPersistenceChecks() {     processMaxIdleSwaps();    processMaxActiveSwaps();    processMaxIdleBackups(); }

此外,通过配置pathname为空,即可禁用session的持久化策略,在代码中,判断pathname为空时,不再创建持久化文件,从而禁用此功能。

  

总结下,正如文档中所描述,StandardManager所支持的重启时加载已持久化的Session这一特性,相比PersistentManager只能算简单实现。要实现更健壮、更符合生产环境的重启持久化,最好使用PersistentManager并进行恰当的配置。

看完上述内容,你们掌握Tomcat的Session持久化策略是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

配置 文件 活动 策略 方法 服务器 问题 面的 服务 一致 内容 数据 时候 更多 状态 分析 健壮 恰当 束手无策 为此 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海卓越科技互联网 科技赋能下的互联网金融 互联网是不是新科技 平安科技 互联网 互联网科技集团 有马互联网科技 百单互联网科技有限公司 互联网金融科技平台 互联网科技logo 互联网 科技服务平台 深圳卡尔迅互联网科技有限公司怎么样 宁夏科技产业互联网案例 知域互联网科技有限公司大骗子 米聚互联网科技南京有限公司排面 朱啸虎曾投资哪些互联网科技企业 上海创道互联网络科技有限公司 互联网科技融合创新 好易买互联网科技 深圳互联网科技园地址 宁波允成互联网科技有限公司 湖南永感互联网科技有限公司 互联网科技有限公司经营范围 广州互联网科技公司 青岛互联网科技公司 互联网科技教育视频 贵州叶脉互联网科技有限公司所属行业 武汉健翔互联网络科技有限公司 互联网科技包装股份有限公司上市 科技互联网经济论坛 互联网科技创业有什么好项目
0