session共享配置, 踩的坑

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35240226/article/details/86593587

第一步 maven配置

 

<!-- Jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
<!-- Spring Data Redis -->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.7.3.RELEASE</version>
</dependency>
<!-- Spring Session -->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session</artifactId>
    <version>1.2.2.RELEASE</version>
</dependency>
<!-- Apache Commons Pool -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.4.2</version>
</dependency>

注意:Multiple annotations found at this line: 如果报这个错,说明

maven pom.xml 中依赖的spring的版本和配置不匹配导致的。

在pom.xml中使用的是

<spring.version>4.0.9.RELEASE</spring.version> 

使用的是 4.0 版本的,但是上面是3.1版本的

把上面截图中的spring配置改为4.0 ,同时做一次clean操作,问题解决

第二步 配置Filter

<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>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>ERROR</dispatcher>
</filter-mapping>

注意:这个配置要放过滤链第一个

第三步  Spring配置文件

<context:component-scan base-package="org.springframework.web.filter.DelegatingFilterProxy"/>

<bean
	class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" >
	 <property name="maxInactiveIntervalInSeconds" value="1800" />
	</bean>
<bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="localhost" />
    <property name="password" value="your-password" />
    <property name="port" value="6379" />
    <property name="database" value="10" />
</bean>

maxInactiveIntervalInSeconds表示超时时间,默认是1800秒。

一定记得设置注意扫描,把springSessionRepositoryFilter扫描出来

要不然报 No bean named 'springSessionRepositoryFilter' is defined的错误

spring-session要求Redis Server版本不低于2.8

testOnBorrow=false由于不检测池里连接的可用性,

于是假如连接池中的连接被数据库关闭了,应用通过连接池getConnection时,都可能获取到这些不可

用的连接,且这些连接如果不被其他线程回收的话,它们不会被连接池被废除,也不会重新被创建,

占用了连接池的名额,项目本身作为服务端,数据库链接被关闭,客户端调用服务端就会出现大量的timeout,客户端设置了超时时间,然而主动断开,服务端必然出现close_wait。

展开阅读全文

没有更多推荐了,返回首页