Tomcat8利用Redis配置Session共享

作者:chenhaozjnubit 分类: 发布于:2018-2-28 10:54 ė1222次浏览 60条评论

同一个应用在运行多个tomcat实例的时候,经常需要共享Session。tomcat配置共享session有多种方式

1、利用tomcat自身集群特性进行配置;

2、利用Memcache第三方缓存进行配置;

3、利用Redis第三方缓存进行配置;

由于生产环境我们主使用了redis(在阿里云中使用了redis服务)本文重点介绍了tomcat利用redis进配置session共享。

重点在于tomcat 8.x

 

因为tomcat7还有点不同,tomcat7的配置可以利用一个开源组件,直接配置即可以使用,比较简单方便(直接参考这个文章即可:http://blog.csdn.net/qq584852076/article/details/46502185)。

tomcat8却是有不同的,开源组件明确说是不支持的。

开源组件在这里: https://github.com/jcoleman/tomcat-redis-session-manager

打开网址之后,看Readme说明:

分步指南

1. 下载开源项目

        https://github.com/jcoleman/tomcat-redis-session-manager

        

2. 创建maven项目(或者直接用gradle编译也可以)

        创建项目并把src/main/java/com/orangefunction/tomcat/redissessions/复制到项目

3. 支持tomcat8需修改代码

        RedisSessionManager.java        

 @@ -713,9 +713,9 @@ private void initializeSerializer() throws ClassNotFoundException, IllegalAccess
 serializer = (Serializer) Class.forName(serializationStrategyClass).newInstance(); serializer = (Serializer) Class.forName(serializationStrategyClass).newInstance();
    
 Loader loader =null; Loader loader =null;
 - +Context context =this.getContext();
 - if (getContainer()!=null) { + if (context!=null) {
 - loader =getContainer().getLoader(); + loader =context.getLoader();
 } }
    
 ClassLoader classLoader =null; ClassLoader classLoader =null;

 

 

 

4. 打包部署

    将实现包和依赖包 commons-pool2-2.2.jar、jedis-2.5.2.jar、tomcat-redis-session-manager-master-2.0.0.jar拷贝到tomcat的lib下

    新增tomcat context.xml配置

   

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> 
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="r-wz97b7d28a98aa44.redis.rds.aliyuncs.com"
port="6379"
database="0"
password="xxxxxxx"
maxInactiveInterval="60" />

 

 

 

建议引用的几个jar( commons-pool2-2.2.jar、jedis-2.5.2.jar)和新编译的jar(tomcat-redis-session-manager-2.0.0.jar)放在tomcat的 lib下面。

同时如果应用下的WEB-INF/lib有相同的jar去掉

 

 

重启tomcat服务即可

本文出自 爱奕乐,转载时请注明出处及相应链接。

分享本文至:

发表评论

电子邮件地址不会被公开。必填项已用*标注