1. 程式人生 > >我的tomcat+redis實現session共享配置之路

我的tomcat+redis實現session共享配置之路

2、在myeclipse 新建一個maven專案【maven-archetype-quickstart】
原始檔新建包名com.orangefunction.tomcat.redissessions
講下載下來的java類拷貝到該包之下(這些java類只實現tomcat7,實現tomcat8需要做一些修改)
JavaSerializer.java
RedisSession.java
RedisSessionHandlerValve.java
RedisSessionManager.java
Serializer.java
SessionSerializationMetadata.java

tomcat7與tomcat8程式碼差異對比

3、tomcat8與tomcat7 有些實現程式碼不一樣,需各自新建一個maven專案要各自打包,注意tomcat引得版本與jdk要保持一致
pom打包注意點

====tomcat8 maven pom.xml====

<dependencies>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-catalina</artifactId>
        <version>8.0.33</version
>
</dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.2</version> </dependency> </dependencies> <build> <plugins> <plugin
>
<!-- 打jar包 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.0</version> <configuration> <!-- 原始碼編譯版本 --> <source>1.8</source> <!-- 目標平臺編譯版本 --> <target>1.8</target> <!-- 字符集編碼 --> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>

====tomcat7 maven pom.xml====

<dependencies>
  <!-- tomcat7 source1.7  -->
      <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-catalina</artifactId>
        <version>7.0.27</version>
    </dependency>
      <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.7.2</version>
    </dependency>

  </dependencies>

  <build>
    <plugins>
        <plugin> <!-- 打jar包 -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <!-- 原始碼編譯版本 -->
                <source>1.7</source>
                <!-- 目標平臺編譯版本 -->
                <target>1.7</target>
                <!-- 字符集編碼 -->
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

將打包出來的tomcat-redis的jar包和
jedis-2.7.2.jar
commons-pool2-2.3.jar
拷貝到tomcat的lib資料夾下面

4、tomcat配置
====tomcat context.xml====

<!-- 
com.orangefunction.tomcat.redissessions 是自定義maven專案的報名路徑,切需要與maven 中 RedisSessionManager的serializationStrategyClass值一致
-->

<!-- redis session 共享配置 -->
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
    host="127.0.0.1"  
    port="6379"  
    database="0"  
    maxInactiveInterval="60" />


<!-- 叢集配置 還未進行驗證-->
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />        
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" 
    maxInactiveInterval="60"
    sentinelMaster="mymaster"
    sentinels="127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382" />

5、需要特別注意的是專案中要存入session的物件必須實現序列化,否知會出現序列化錯誤

public class Test implements Serializable {
    private static final long serialVersionUID = 5021582410009851677L;
    ......
}

配置截圖:

tomcat lib

tomcat context.xml 配置

tomcat配置與java原始碼對應

配置實現redis包名路徑的對應

參考網址: