SpringCloud实现Redis在各个微服务的Session共享问题
作者:别等时光染了梦想 发布时间:2022-07-14 06:33:19
标签:spring,cloud,redis
在微服务中,需要我们在各个微服务中共享Session,使用Redis来共享Session是一个很好的解决方法,Redis是运行在内存中,查取速度很快。
1.pom文件中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
2.使用Redis的session替换Spring的session
package com.xueqing.demo.sleuthserverhi;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
/**
* 添加redis配置类启用redis代码spring默认session
*/
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}
3.application.properties配置文件中添加redis配置
spring.redis.port= 6379
spring.redis.host=localhost
4.启动两个端口以一样的tomcat测试
package com.xueqing.demo.sleuthserverhi;
import java.util.logging.Level;
import java.util.logging.Logger;
import brave.sampler.Sampler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
@SpringBootApplication
@RestController
public class SleuthServerHiApplication {
public static void main(String[] args) {
SpringApplication.run(SleuthServerHiApplication.class, args);
}
private static final Logger LOG = Logger.getLogger(SleuthServerHiApplication.class.getName());
@Autowired
private RestTemplate restTemplate;
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@RequestMapping("/hi")
public String callHome(HttpServletRequest request){
LOG.log(Level.INFO, "calling trace service-hi ");
request.getSession().setAttribute("hi","111");
LOG.log(Level.WARNING, "加入成功");
return restTemplate.getForObject("http://localhost:8989/miya", String.class);
}
@RequestMapping("/info")
public String info(HttpServletRequest request){
LOG.log(Level.INFO, request.getSession().getAttribute("miya")+"");
LOG.log(Level.WARNING, "获取成功");
return "i'm service-hi";
}
@Bean
public Sampler defaultSampler() {
return Sampler.ALWAYS_SAMPLE;
}
}
package com.xueqing.demo.sleuthservermiya;
import brave.sampler.Sampler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import java.util.logging.Level;
import java.util.logging.Logger;
@SpringBootApplication
@RestController
public class SleuthServerMiyaApplication {
public static void main(String[] args) {
SpringApplication.run(SleuthServerMiyaApplication.class, args);
}
private static final Logger LOG = Logger.getLogger(SleuthServerMiyaApplication.class.getName());
@RequestMapping("/hi")
public String home(HttpServletRequest request){
LOG.log(Level.INFO, "hi is being called");
request.getSession().setAttribute("miya","111");
LOG.log(Level.WARNING, "加入成功");
return "hi i'm miya!";
}
@RequestMapping("/miya")
public String info(HttpServletRequest request){
LOG.log(Level.INFO, "info is being called");
LOG.log(Level.INFO, request.getSession().getAttribute("hi")+"");
LOG.log(Level.WARNING, "获取成功");
return restTemplate.getForObject("http://localhost:8988/info",String.class);
}
@Autowired
private RestTemplate restTemplate;
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@Bean
public Sampler defaultSampler() {
return Sampler.ALWAYS_SAMPLE;
}
}
5.注意事项:我用的springCloud版本为F版本需要Redis版本为2.8以上 如果不是2.8以上请升级,地址如下
https://github.com/MicrosoftArchive/redis/releases
总结
以上所述是小编给大家介绍的SpringCloud实现Redis在各个微服务的Session共享网站的支持!
来源:https://blog.csdn.net/wangxueqing52/article/details/81871389


猜你喜欢
- Eclipse项目中为什么会有红感叹号,具体分析一下【问题原因】:工程中classpath中指向的包路径错误【解决办法】:右键项目名称 Bu
- 本文实例为大家分享了java日期时间基本操作方法,供大家参考,具体内容如下1. 获得Calendar实例:Calendar c = Cale
- 在 Android 加载图片一般使用 ImageView,这里简单记录一下这个控件的使用方法。最简单就是在 xml 里直接使用 ImageV
- 本文实例为大家分享了Java实现在线聊天室的具体代码,供大家参考,具体内容如下- 本文讲述了从实现单个多个客户的收发信息(基础简易版),到各
- 1. 获取绝对文件路径System.IO.Path.GetFullPath(string path)string fileName = &q
- 本文实例讲述了Java实现分解任意输入数的质因数算法。分享给大家供大家参考,具体如下:分解任意输入数的质因数:质因数概念:任何一个合数都可以
- 1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立
- 场景:使用intellij idea开发,持久层dao使用了mybatis,经常需要编辑mybatis的××Mapper.java和××Ma
- 引言本文是关于Spark优化性能与内存使用的最佳实践,翻译整理自Tuning - Spark 3.3.2 Documentation。由于s
- gravity与layout_gravity属性在android布局中,我们经常会用到“重心”-gr
- springboot项目还是ssm等java常用框架都会有这样的问题,解决办法通用问题场景前端发送Post请求,前端返回400 Bad Re
- java 算法之归并排序详解一、思想 归并排序:将一个数组排序,可以先(递归地)将它分成两半部份分别排序,然后将结果归并起来; &
- 从何说起前些天和朋友讨论一个问题,他们的应用有几十万会员然后对应有积分,现在想做积分排名的需求,问有没有什么好方案。这个问题也算常见,很多地
- 模拟新闻 APP 的界面1)写 ListView 之前先写布局: 这里有两种 Item 的布局:<?xml version=
- 这个问题困扰了很久,有些类不是controller在使用autowired注入的类显示为空,找到网上的方法是在类初始化时主动注入被Autow
- 由于需要访问MongoDB,但是本地开发环境不能直接连接MongoDB,需要通过SecureCRT使用127.0.0.2本地IP代理。但是程
- 1. 读取json file1.1 Json dependency<dependency> &nbs
- C#中属性的目的是对字段的封装,是为了程序数据的安全性考虑的。本文即以实例形式对C#中只读只写属性进行剖析。对于只读或只写的属性定义:1、不
- Android通过wifi连接手机的方法,供大家参考,具体内容如下1.首先电脑,手机连接同一个网络2.在Android studio中Ter
- 正在尝试分配更低的访问权限?在进行Java编程时会给我们报出如下提示怎么办?这里我们将给大家介绍详细的解决方法。首先,查看,控制台给出的提示