session+spring+redis實現分佈式session共享,實測通過

  一、引入maven依賴,項目spring是4.1.5,需要兼容,否則報錯,

  <spring.version>4.1.5.RELEASE</spring.version>

<!-- 使用redis存儲session -->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>1.1.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session</artifactId>
    <version>1.1.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.7.2.RELEASE</version>
    <!-- <version>1.6.6.RELEASE</version> --><!-- 1.7以下不支持集羣 -->
</dependency>
		
<dependency>
    <groupId>commons-pool</groupId>
    <artifactId>commons-pool</artifactId>
    <version>1.2</version>
    <exclusions>
    	<exclusion>  
              <groupId>xerces</groupId>  
      	      <artifactId>xerces</artifactId>  
       	</exclusion>  
       	<exclusion>
       	      <groupId>xml-apis</groupId>
     	      <artifactId>xml-apis</artifactId>
     	</exclusion>
     </exclusions>
</dependency>

 

 

二、web.xml增加過濾器,放在最前面

<!-- session -->
<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.xml:

單機版redis:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
   
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="10"/><!-- 最大空閒連接數, 默認8個 -->
        <property name="maxTotal" value="20"/><!-- 最大連接數, 默認8個 -->
        <property name="blockWhenExhausted" value="true"/><!-- 連接耗盡時是否阻塞, false報異常,ture阻塞直到超時, 默認true -->
        <property name="maxWaitMillis" value="1000"/><!-- 獲取連接時的最大等待毫秒數(如果設置爲阻塞時BlockWhenExhausted),如果超時就拋異常, 小於零:阻塞不確定的時間,  默認-1 -->
        <property name="testOnBorrow" value="true"/><!-- 在獲取連接的時候檢查有效性, 默認false -->
    </bean>
   
    <!-- redis連接配置,依次爲主機ip,端口,密碼,是否使用池,連接池配置引用 -->
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
        p:host-name="127.0.0.1" p:port="6379" p:usePool="true" p:pool-config-ref="jedisPoolConfig">
    </bean>
   
    <!-- 配置spring-session -->
    <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
        <!-- session過期時間,單位是秒 -->
        <property name="maxInactiveIntervalInSeconds" value="30"></property>
    </bean>
</beans>

集羣:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
   
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="10"/><!-- 最大空閒連接數, 默認8個 -->
        <property name="maxTotal" value="20"/><!-- 最大連接數, 默認8個 -->
        <property name="blockWhenExhausted" value="true"/><!-- 連接耗盡時是否阻塞, false報異常,ture阻塞直到超時, 默認true -->
        <property name="maxWaitMillis" value="1000"/><!-- 獲取連接時的最大等待毫秒數(如果設置爲阻塞時BlockWhenExhausted),如果超時就拋異常, 小於零:阻塞不確定的時間,  默認-1 -->
        <property name="testOnBorrow" value="true"/><!-- 在獲取連接的時候檢查有效性, 默認false -->
    </bean>
   
    <!-- redis連接配置,依次爲主機ip,端口,密碼,是否使用池,連接池配置引用 -->
    <!-- <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
        p:host-name="127.0.0.1" p:port="6379" p:usePool="true" p:pool-config-ref="jedisPoolConfig">
    </bean> -->
      
      <!-- notify-keyspace-events Exg 使用集羣必須設置redis的配置文件 -->
      <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
            <!-- Redis-CLuster  -->
            <constructor-arg index="0" ref="redisClusterConfig"/>
            <!-- 配置Redis連接池 ,可以不配置,使用默認就行!  -->
            <constructor-arg index="1" ref="jedisPoolConfig"/>
    </bean>
      <bean id="redisClusterConfig"
            class="org.springframework.data.redis.connection.RedisClusterConfiguration">
            <property name="maxRedirects" value="3" />
            <property name="clusterNodes">
                  <set>
                        <bean id="cluster0" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg value="12.3.11.155" />
                              <constructor-arg type="int" value="7001" />
                        </bean>
                        <bean id="cluster1" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg name="host" value="12.3.11.155" />
                              <constructor-arg name="port" value="7002" />
                        </bean>
                        <bean id="cluster2" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg name="host" value="12.3.11.155" />
                              <constructor-arg name="port" value="7003" />
                        </bean>
                        <bean id="cluster3" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg name="host" value="12.3.11.155" />
                              <constructor-arg name="port" value="7004" />
                        </bean>
                        <bean id="cluster4" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg name="host" value="12.3.11.155" />
                              <constructor-arg name="port" value="7005" />
                        </bean>
                        <bean id="cluster5" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg name="host" value="12.3.11.155" />
                              <constructor-arg name="port" value="7006" />
                        </bean>
                  </set>
            </property>
      </bean>
     <!-- 讓Spring Session不再執行config命令 -->
<!--     <util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>
 -->    
    
    
   
    <!-- 配置spring-session -->
    <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
        <!-- session過期時間,單位是秒 -->
        <property name="maxInactiveIntervalInSeconds" value="30"></property>
    </bean>
</beans>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章