因为项目须要,须要实现Tomcat8.0 + Redis 实现 Session 会话共享,以便于实现多应用集群。后参考了开源项目: https://github.com/jcoleman/tomcat-redis-session-manager 进行调整后实现该需求。java
实现该需求须要进行三步操做:git
** 1.下载tomcat-redis-session-manager,调整代码后进行打包。**github
修改1:修改tomcat-catalina的版本为8.0.26redis
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-catalina</artifactId> <version>8.0.26</version> </dependency>
/修改2:修改 RedisSessionManager.java 文件startInternal方法apache
Boolean attachedToValve = false; // 这是原先的版本 // for (Valve valve :getContext().getPipeline().getValves()) { // 这是调整后的内容 for (Valve valve :getContext().getPipeline().getValves()) { if (valve instanceof RedisSessionHandlerValve) { this.handlerValve = (RedisSessionHandlerValve) valve; this.handlerValve.setRedisSessionManager(this); log.info("Attached to RedisSessionHandlerValve"); attachedToValve = true; break; } }
修改3:修改 RedisSessionManager.java 文件 initializeSerializer方法tomcat
Loader loader = null; /* // 这是原先的写法 if (getContainer() != null) { loader = getContainer().getLoader(); } */ // 这是如今的写法 if (getContext() != null) { loader = getContext().getLoader(); } ClassLoader classLoader = null;
以上内容都调整后,利用Maven打包成Jar包,譬如我本地叫:tomcat-redis-session.jarsession
2. 拷贝相关的Jar包到Tomcat8.0的Lib包下maven
分别拷贝commons-pool2-2.2.jar、jedis-2.5.2.jar、以及刚才打包生成的 tomcat-redis-session.jar 到tomcat8.0 的lib下。gradle
3. 修改Tomcat8.0 的conf/Context.xml 文件this
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" database="0" host="redis IP" maxInactiveInterval="session过时时长,以秒为单位" password="redis的密码,若是没有则置空" port="redis端口"/>
当上面三大步骤都处理完成后,重启 Tomcat 就可见证奇迹了。