tomcat使用Spring-Session实现session同步

前言:

nginx实现提供了Ip_hash的方式实现了tomcat的集群,但未实现session的同步,当被分配的tomcat节点挂掉了,改系统的session信息将丢失,因此选用以下两种方式。

1.tomcat Cluster实现session同步,这种方式是通过多个节点间定时的同步每个节点session中的信息来实现session同步的,这种效率低,同时依赖tomcat这种平台,不推荐使用,如果大家需要使用,tomcat 的 \webapps\docs\cluster-howto.html文件提供了实现session同步的配置方法,大家可以参看,那么是否存在一种可以解决夸平台,同时与代码的耦合度低的session同步的方式呢,大家请继续看spring-session搭建session同步.

2.Spring-Session搭建tomcat节点间session同步,具体配置如下。

pom.xml相关配置

 <!--spring session redis-->
    <dependency>
      <groupId>org.springframework.session</groupId>
      <artifactId>spring-session-data-redis</artifactId>
      <version>1.2.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.8.1</version>
    </dependency>

spring ioc中的配置:

 <bean id="redisHttpSessionConfiguration"      class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
        <property name="maxInactiveIntervalInSeconds" value="600"/>
    </bean>
    <!--redis 连接池配置-->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="100" />
        <property name="maxIdle" value="10" />
    </bean>
    <bean id="jedisConnectionFactory"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">
        <property name="hostName" value="${redis.host}"/>
        <property name="port" value="${redis.port}"/>
        <property name="password" value="${redis.password}" />
        <property name="timeout" value="${redis.timeout}"/>
        <property name="usePool" value="${redis.usePool}"/>
        <property name="poolConfig" ref="jedisPoolConfig"/>
    </bean>

 web.xml中的配置:

 <!--配置springsession过滤器-->
  <filter>
    <filter-name>springSessionRepositoryFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>springSessionRepositoryFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  

  说明:spring-session是将session信息保存在redis中,多个节点同时公用redis中的session信息,以达到session同步的目的,因此在配置完成后一定要保证redis的服务端是启动的。

猜你喜欢

转载自blog.csdn.net/zh127368zh/article/details/81837263