1. 程式人生 > >spingMVC+mybatis+spring-session共享內存配置

spingMVC+mybatis+spring-session共享內存配置

加載 not tro encoding cto pri 實現 spool gin

1. redis依賴:

<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>${redis.version}</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</
artifactId> <version>2.8.1</version> </dependency>
org.springframework.session 會自動引入 spring-data-redis

2. 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>

3. spring-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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- session設置 --> <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> <!-- redis連接工廠 --> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy"> <property name="hostName" value="${redis_hostName}"/> <property name="port" value="${redis_port}"/> <property name="password" value="${redis_password}" /> <property name="timeout" value="3000"/> <property name="usePool" value="true"/> <property name="poolConfig" ref="jedisPoolConfig"/> </bean> </beans>
maxInactiveIntervalInSeconds 這裏配置session的過期時間,單位為秒,默認是1800半個小時。

4. applicationContext.xml引入spring-redis.xml

<?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:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
           http://www.springframework.org/schema/context  
           http://www.springframework.org/schema/context/spring-context-3.0.xsd
           http://www.springframework.org/schema/aop    
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/tx    
           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
           
        <!-- 加載屬性配置文件 -->
        <!-- 方式一 
        <context:property-placeholder location="classpath:jdbc.properties"/>-->
        <!-- 方式二 -->
        <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <!--要是有多個配置文件,只需在這裏繼續添加即可 -->
                   <value>classpath:jdbc.properties</value>
                   <value>classpath:redis.properties</value>
                </list>
            </property>
        </bean>
        
        <!-- 配置數據源 -->
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${jdbc.driverClassName}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </bean>
        
        <!--配置事務管理器 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!-- 註入數據源 -->
            <property name="dataSource" ref="dataSource"/>
        </bean>
        
        <!-- 自動掃描了所有的XxxxMapper.xml對應的mapper接口文件,這樣就不用一個一個手動配置Mpper的映射了,只要Mapper接口類和Mapper映射文件對應起來就可以了。 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.ssm.dao" />
        </bean>

        <!-- 配置mybatis -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <!-- mapperLocations指定mapper.xml文件位置 -->
            <property name="mapperLocations" value="classpath:mapper/*Mapper.xml"/>  
            <!-- configLocation指定mybatis配置文件位置 -->
            <property name="configLocation" value="classpath:mybatis-config.xml" />
            <!-- 實體別名 -->
            <property name="typeAliasesPackage" value="com.ssm.domain"/> 
        </bean>
    
        <!-- 自動掃描註解的bean -->
        <context:component-scan base-package="com.ssm.service" />
        
        <!-- 啟用註解配置 -->
        <context:annotation-config/>
        <!-- 使用事務註解 -->
        <tx:annotation-driven/>
        
        <!-- Spring中引入其他配置文件 -->
        <import resource="classpath*:/spring-redis.xml" />
        
</beans>

5. redis.properties

redis_hostName = xxx
redis_port = 6379
redis_password = xxxx
redis_timeout = 20000

6. 這樣配置之後,對於Nginx+多臺Tomcat的集群而言,多臺tomcat使用的session就是基於redis緩存實現的session,當某臺Tomcat掛了時,原來訪問這臺Tomcat的用戶會被Nginx轉發到其他Tomcat,因為JSESSIONID沒有變,所以還是可以從Reids中找到原來的session,也就是說這樣配置之後,session只和redis相關了,和tomcat沒有關系,tomcat是否重啟不影響用戶的session.

spingMVC+mybatis+spring-session共享內存配置