20181101-springBoot解决Session共享问题

1、session共享的解决方案
①使用spring-session+redis解决
②使用负载均衡策略的ip绑定解决
③tomcat配置session共享

2、springBoot2.0.6下使用springSession+redis实现Session共享
①pom.xml引入依赖

<!-- 
			 这里需要特别注意Spring Boot 2.x 系列默认使用的 Redis 连接为 Lettuce,而非 Jedis
				所以排除 Lettuce 依赖,并额外引入 Jedis 依赖
		 -->

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
			<exclusions>
				<exclusion>
					<groupId>io.lettuce</groupId>
					<artifactId>lettuce-core</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>
		<!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> 
			<version>1.4.7.RELEASE</version> </dependency> -->
		<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
		</dependency>

②application.properties

server.port=8081

spring.redis.database=0
spring.redis.host=192.168.48.3
spring.redis.port=6379

redis.hostname=192.168.48.3
redis.port=6379


③RediConfig.java

package cn.joe.config;

import java.time.Duration;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * redis配置文件,从application.properties中读取配置信息
 * @author joe
 *
 */
@EnableRedisHttpSession
public class RedisConfig {
	//从application.properties中读取配置信息,冒号后面的值为未配置配置文件时的默认值
	@Value("${reids.hostname:192.168.48.3}")
	private String redisHostName;
	
	@Value("${redis.port:6379}")
	private int port;
	
	@Bean
	public RedisStandaloneConfiguration redisStandaloneConfiguration() {
		RedisStandaloneConfiguration rsc = new RedisStandaloneConfiguration();
		rsc.setDatabase(0);
		rsc.setHostName(redisHostName);
		rsc.setPort(6379);
//		rsc.setPassword(password);
		return rsc;
	}
	
	//创建redis工厂对象
	@Bean
	public JedisConnectionFactory jedisConnectionFactory(@Qualifier("redisStandaloneConfiguration") RedisStandaloneConfiguration rsc) {
		JedisClientConfiguration.JedisClientConfigurationBuilder clientConfig = JedisClientConfiguration.builder();
		clientConfig.connectTimeout(Duration.ofMillis(0));//  连接超时时间
		JedisConnectionFactory factory = new JedisConnectionFactory(rsc, clientConfig.build());
		return factory;
		
	}
}

④初始化Session

package cn.joe.init;

import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;

import cn.joe.config.RedisConfig;

/**
 * 初始化session
 * @author joe
 *
 */
public class SessionInitializer extends AbstractHttpSessionApplicationInitializer{
	public SessionInitializer() {
		super(RedisConfig.class);
	}
}

猜你喜欢

转载自blog.csdn.net/qiaoqiyu6416/article/details/83627596