本文在centos服务器使用redissessions实现tomcat集群共享httpsession信息;本文基于springmvc实现;
1. 查看JDK版本
java -version
显示
[root@localhost tomcat]# java -version
openjdk version “1.8.0_181”
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
2. 配置jdk(如果 java -version没有信息)
# 安装jdk后,修改 /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
# source /etc/profile 生效
3. 安装 tomcat
下载地址: http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.47/bin/
tar -xzvf ....tar.gz
# 重命名,添加端口后缀 8081,再重新拷贝一份,目录后缀改为 8082
mv apache-tomcat-80.0.47 apache-tomcat-80.0.47-8081
cp apache-tomcat-80.0.47-8081/ apache-tomcat-80.0.47-8082/
将 已经编译的 tomcat redis session jar包以及 pool2 以及 jedis jar 保存到 centos 的 tomcat/libs 下;
下载后,将后缀都改为.jar;
修改 /conf/context.xml 文件
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.1.131"
port="6379"
database="0"
password="123456"
maxInactiveInterval="60"
/>
修改端口: 8081以及8082 (将两份 tomcat 原端口为 80 的改为 8081和8082)
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
8443 不必修改;
启动 tomcat 无法访问 : 是防火墙的问题;
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
关闭防火墙后,访问正常;
访问应用出现错误:
org.apache.jasper.JasperException: javax.servlet.ServletException: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool (redis还未安装启动);
访问接口:
@RequestMapping(value = "/usrLogin")
public ModelAndView testLogin(HttpSession session) {
ModelAndView mav = new ModelAndView("home");
mav.addObject("loginInfo", "" + session.getId());
return mav;
}
安装redis:
tar xzvf redis.xxxx.tar.gz
[root@localhost redis]# make MALLOC=libc
[root@localhost redis]# make & make install
可能是 redis.conf 的 bind 127.0.0. 1 引起; 注释掉;
重启redis:
#设置为开机自启动服务器 chkconfig redisd on
#打开服务 service redisd start
#关闭服务 service redisd stop
验证 redis session 是否有效;
springmvc的spring-mvc.xml上添加如下 配置:
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath*:webinfo.properties</value>
</list>
</property>
</bean>
webinfo.properties 上添加
site.port=8081 (两个tomcat 分别配置各自的端口)
Controller.java 添加
@Value("${site.port}")
private String sitePort;
@RequestMapping(value = "/usrLogin")
public ModelAndView testLogin(HttpSession session) {
ModelAndView mav = new ModelAndView("home");
if (session.getAttribute("userName") == null) {
System.out.println("no session");
session.setAttribute("userName", "shareName" + sitePort);
}
mav.addObject("loginInfo", "" + session.getAttribute("userName").toString());
return mav;
}
如果生效,则显示的 loginInfo,则第二次开始不会出现 no session的提示,每次访问端口都可能变化;