20181101-springBoot解決Session共享問題
阿新 • • 發佈:2018-11-06
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); } }