由于项目需要,需要实现Tomcat8.0 + Redis 实现 Session 会话共享,以便于实现多应用集群。后参考了开源项目: https://github.com/jcoleman/tomcat-redis-session-manager 进行调整后实现该需求。
实现该需求需要进行三步操作:
下载tomcat-redis-session-manager,调整代码后进行打包。
拷贝相关的Jar包到Tomcat8.0的Lib包下
修改Tomcat8.0 的conf/Context.xml 文件
** 1.下载tomcat-redis-session-manager,调整代码后进行打包。**
创建maven项目(或者直接用gradle编译也可以)
把src/main/java/com/orangefunction/tomcat/redissessions/复制到项目中
修改 RedisSessionManager.java 代码
修改1:修改tomcat-catalina的版本为8.0.26
org.apache.tomcat
tomcat-catalina
8.0.26
/修改2:修改 RedisSessionManager.java 文件startInternal方法
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方法
Loader loader = null;
/*
// 这是原先的写法
if (getContainer() != null) {
loader = getContainer().getLoader();
}
*/
// 这是现在的写法
if (getContext() != null) {
loader = getContext().getLoader();
}
ClassLoader classLoader = null;
以上内容都调整后,利用Maven打包成Jar包,譬如我本地叫:tomcat-redis-session.jar
2. 拷贝相关的Jar包到Tomcat8.0的Lib包下
分别拷贝commons-pool2-2.2.jar、jedis-2.5.2.jar、以及刚才打包生成的 tomcat-redis-session.jar 到tomcat8.0 的lib下。
3. 修改Tomcat8.0 的conf/Context.xml 文件
当上面三大步骤都处理完成后,重启 Tomcat 就可见证奇迹了。
转载至链接:https://my.oschina.net/billyteam/blog/1859966