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);
}
}