准备工作
新建两个springboot2.0.2版本的服务,配置文件添加:
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
配置文件需要添加以上两项配置,不然会报以下错误:
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
集成redis
添加Maven依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
必须添加第三个依赖,不然会报以下错误:
Caused by: java.lang.NoClassDefFoundError: redis/clients/jedis/Tuple
添加redis配置信息:
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.timeout=500
**注:关于springboot各个版本的redis集成,参考springboot中各个版本的redis配置问题
新建sessionConfig类
@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 1800)
public class SessionConfig {
<span class="hljs-comment"><span class="hljs-comment">//冒号后的值为没有配置文件时,制动装载的默认值</span></span>
<span class="hljs-meta"><span class="hljs-meta">@Value</span></span>(<span class="hljs-string"><span class="hljs-string">"${spring.redis.host:localhost}"</span></span>)
String HostName;
<span class="hljs-meta"><span class="hljs-meta">@Value</span></span>(<span class="hljs-string"><span class="hljs-string">"${spring.redis.port:6379}"</span></span>)
<span class="hljs-keyword"><span class="hljs-keyword">int</span></span> Port;
<span class="hljs-meta"><span class="hljs-meta">@Bean</span></span>
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public</span></span></span><span class="hljs-function"> JedisConnectionFactory </span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">connectionFactory</span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">()</span></span></span><span class="hljs-function"> </span></span>{
JedisConnectionFactory connection = <span class="hljs-keyword"><span class="hljs-keyword">new</span></span> JedisConnectionFactory();
connection.setPort(Port);
connection.setHostName(HostName);
<span class="hljs-keyword"><span class="hljs-keyword">return</span></span> connection;
}
}
test主类中添加测试接口(端口号:8763):
@SpringBootApplication
@EnableEurekaClient
@RestController
public class ServerTestApplication {
public static void main(String[] args) {
SpringApplication.run(ServerTestApplication.class, args);
}
@RequestMapping(value="/",method = RequestMethod.GET)
public String setSession(HttpServletRequest request){
Map<String,Object> map = new HashMap();
map.put("name","超级管理员");
map.put("account","admin");
request.getSession().setAttribute("userSession",map);
String sessionId = request.getSession().getId();
return sessionId;
}
}
返回结果:
4c0fe3e3-87cc-4991-acae-8bca2645705a
test1主类中添加测试(端口号:8764)
@SpringBootApplication
@EnableEurekaClient
@RestController
public class ServerTest1Application {
public static void main(String[] args) {
SpringApplication.run(ServerTest1Application.class, args);
}
@RequestMapping(value="/",method = RequestMethod.GET)
public Map<String,Object> getSession(HttpServletRequest request){
String sessionId = request.getSession().getId();
Object obj = request.getSession().getAttribute("userSession");
Map<String,Object> map = new HashMap();
map.put("sessionId",sessionId);
map.put("user",obj);
return map;
}
}
返回结果:
<Map>
<sessionId>4c0fe3e3-87cc-4991-acae-8bca2645705a</sessionId>
<user>
<name>超级管理员</name>
<account>admin</account>
</user>
</Map>
从以上结果可以看出,访问8763端口服务的sessionId信息和访问8764端口服务的sessionId信息一致
原文地址:https://www.jianshu.com/p/f0a069d2a85b