- 博客(84)
- 收藏
- 关注
原创 为什么类似于po类不需要注入
在 Spring Boot 应用中,PO(Persistent Object,持久化对象)类通常不需要使用@Autowired。
2024-11-16 14:14:35 127
原创 网关登录校验
单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,不再共享数据。也就意味着每个微服务都需要做登录校验,这显然不可取。
2024-11-15 21:51:08 423
原创 网关路由
现在,微服务网关就起到同样的作用。由于网关本身也是一个独立的微服务,因此也需要创建一个模块开发功能。外面的人要想进入园区,必须经过大爷的认可,如果你是不怀好意的人,肯定被直接拦截。代表负载均衡,从注册中心获取目标微服务的实例列表,并且负载均衡选择一个访问。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的。通过认证后,网关再根据请求判断应该访问哪个微服务,将请求转发过去。网关可以做安全控制,也就是登录身份校验,校验通过才放行。更通俗的来讲,网关就像是以前园区传达室的大爷。
2024-11-15 18:26:20 279
原创 分布式事务(2)----AT模式脏写问题
解决思路就是引入了全局锁的概念。在释放DB锁之前,先拿到全局锁。避免同一时刻有另外一个事务来操作当前数据。如果每一个分支事务都成功,则事务已经结束(因为阶段一已经提交),因此删除阶段一的快照即可。如果有任意分支事务失败,则需要根据快照恢复到更新前数据。
2024-11-01 20:32:21 346
原创 分布式事务(1)
就是指不是在单个服务或单个数据库架构下,产生的事务,例如:跨数据源的分布式事务跨服务的分布式事务综合情况我们之前解决分布式事务问题是直接使用Seata框架的AT模式,但是解决分布式事务问题的方案远不止这一种。
2024-11-01 20:30:37 346
原创 @PostConstruct
在 Spring 框架中,`@PostConstruct` 注解同样有效,但 Spring 还提供了自己的生命周期回调方法,如 `@PostConstruct` 的替代方案 `afterPropertiesSet()` 方法(如果实现了 `InitializingBean` 接口)。- `@PostConstruct` 方法可以是 `public`、`protected` 或 `private` 的,但通常建议使用 `public` 或 `protected`,以便在调试时更容易调用。
2024-10-09 14:31:48 316
原创 分布式事务(2)
组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的。可见,AT模式使用起来更加简单,无业务侵入,性能更好。Seata支持多种存储模式,但考虑到持久化的需要,我们一般选择基于数据库存储。为了方便各个微服务集成seata,我们需要把seata配置共享到nacos,因此。A是规范,目前主流数据库都实现了这种规范,实现的原理都是基于两阶段提交。之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持。
2024-09-25 13:41:14 941
原创 分布式事务(1)
首先我们看看项目中的下单业务整体流程:由于订单、购物车、商品分别在三个不同的微服务,而每个微服务都有自己独立的数据库,因此下单过程中就会跨多个数据库完成业务。而每个微服务都会执行自己的本地事务:交易服务:下单事务购物车服务:清理购物车事务库存服务:扣减库存事务整个业务中,各个本地事务是有关联的。因此每个微服务的本地事务,也可以称为。多个有关联的分支事务一起就组成了。我们必须保证整个全局事务同时成功或失败。我们知道每一个分支事务就是传统的。
2024-09-25 13:33:43 280
原创 @PostConstruct
是 Java EE 中的一个注解,用于标记一个非私有的 void 方法,该方法将在依赖注入完成后由容器调用。这个注解通常用于执行一些初始化工作,例如设置对象的状态或执行一些必要的计算。注解属于 Java 的生命周期回调机制的一部分。
2024-09-21 21:10:18 160
原创 Nacos配置管理(2)-----配置热更新
有很多的业务相关参数,将来可能会根据实际情况临时调整。例如购物车业务,购物车数量有一个上限,默认是10,对应代码如下:现在这里购物车是写死的固定值,我们应该将其配置在配置文件中,方便后期修改。但现在的问题是,即便写在配置文件中,修改了配置还是需要重新打包、重启服务才能生效。能不能不用重启,直接生效呢?这就要用到Nacos的配置热更新能力了,分为两步:在Nacos中添加配置在微服务读取配置。
2024-09-21 15:36:57 347
原创 Nacos配置管理(1)----配置共享
微服务共享的配置可以统一交给Nacos保存和管理,在Nacos控制台修改配置后,Nacos会将配置变更推送给相关的微服务,并且无需重启即可生效,实现配置热更新。我们可以把微服务共享的配置抽取到Nacos中统一管理,这样就不需要每个微服务都重复配置了。网关的路由同样是配置,因此同样可以基于这个功能实现动态路由功能,无需重启网关即可修改路由配置。)初始化时处理的,发生在项目的引导阶段。不过,需要注意的是,读取Nacos配置是SpringCloud上下文(中,那么在项目引导阶段就可以读取nacos中的配置了。
2024-09-21 15:32:24 1558
原创 网关登录校验(3)-----如何在微服务之间传递用户信息
微服务之间调用是基于OpenFeign来实现的,并不是我们自己发送的请求。下单的过程中,需要调用商品服务扣减库存,调用购物车服务清理用户购物车。这样以来,每次OpenFeign发起请求的时候都会调用该方法,传递用户信息。前端发起的请求都会经过网关再到微服务,由于我们之前编写的过滤器和拦截器功能,微服务可以轻松获取登录用户信息。但有些业务是比较复杂的,请求到达微服务后还需要调用其它多个微服务。由于微服务获取用户信息是通过拦截器在请求头中读取,因此要想实现微服务之间的用户信息传递,就。
2024-09-20 22:40:20 151
原创 网关登录校验(2)----网关如何将用户信息传递给微服务
考虑到微服务内部可能很多地方都需要用到登录用户信息,因此我们可以利用SpringMVC的拦截器来实现登录用户信息获取,并存入ThreadLocal,方便后续使用。之前我们无法获取登录用户,所以把购物车服务的登录用户写死了,现在需要恢复到原来的样子。不过,需要注意的是,这个配置类默认是不会生效的,因为它所在的包是。改造网关过滤器,在获取用户信息后保存到请求头,转发到下游微服务。,与其它微服务的扫描包不一致,无法被扫描到,因此无法生效。接下来,我们只需要编写拦截器,获取用户信息并保存到。中,并写好自动装配。
2024-09-20 22:36:40 867
原创 网关登录校验(1)
单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,不再共享数据。也就意味着每个微服务都需要做登录校验,这显然不可取。
2024-09-19 22:28:17 730
原创 网关路由
由于网关本身也是一个独立的微服务,因此也需要创建一个模块开发功能。SpringCloudGateway:基于Spring的WebFlux技术,完全支持响应式编程,吞吐能力更强。外面的人要想进入园区,必须经过大爷的认可,如果你是不怀好意的人,肯定被直接拦截。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的。通过认证后,网关再根据请求判断应该访问哪个微服务,将请求转发过去。网关可以做安全控制,也就是登录身份校验,校验通过才放行。更通俗的来讲,网关就像是以前园区传达室的大爷。
2024-09-18 22:58:11 489
原创 微服务拆分原则
为了达成这一目的,该阶段项目架构往往会比较简单,很多情况下会直接采用单体架构,这样开发成本比较低,可以快速产出结果,一旦发现项目不符合市场,损失较小。虽然出现了服务间调用,但此时无论你如何在商品服务做内部修改,都不会影响到订单微服务,服务间的耦合度就降低了。但是,这么做的问题就在于后期做服务拆分时,可能会遇到很多代码耦合带来的问题,拆分比较困难(如果这一阶段采用复杂的微服务架构,投入大量的人力和时间成本用于架构设计,最终发现产品不符合市场需求,等于全部做了无用功。,这其实是拆分的目标。
2024-09-09 20:58:16 454
原创 部署nacos
我们基于Docker来部署Nacos的注册中心,首先我们要准备MySQL数据库表,用来存储Nacos的数据。Nacos:Alibaba公司出品,目前被集成在SpringCloudAlibaba中,一般用于Java应用。Eureka:Netflix公司出品,目前被集成在SpringCloud当中,一般用于Java应用。Consul:HashiCorp公司出品,目前集成在SpringCloud中,不限制微服务语言。功能(后面会学习),因此在国内使用较多,我们会Nacos为例来学习。然后,将课前资料中的。
2024-09-09 10:56:02 495
原创 Finalshell上传文件失败或者进度总为百分之零解决
3.如果还是不行,则用chmod 777 文件路径,改变文件的权限。2.关闭原标签后即可顺利上传。
2024-09-09 09:48:43 337
原创 final关键字
学了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。如果有一个方法我不想别人去改写里面内容,该怎么办呢?Java提供了final关键字,表示修饰的内容不可变。: 不可改变,最终的含义。可以用于修饰类、方法和变量。类:被修饰的类,不能被继承。方法:被修饰的方法,不能被重写。变量:被修饰的变量,有且仅能被赋值一次。
2024-09-08 21:14:46 176
原创 部署黑马商城至云服务器
想要将项目部署到云服务器,首先我们需要有一个云服务器,本次我们用的是阿里云ECS云服务器我们登录进入主页,点击左上角的产品依次按照上图点击,我们可以利用学生认证,然后领取免费的服务器时长拥有了服务器后,我们点击管理控制台我们创建一个实例服务器,依次填写好相关信息,然后我们会获取到一个公网ip,这个公网ip就是以后别人访问的主机ip服务器,我们可以保存起来.
2024-09-07 13:46:04 775
原创 Filter详解
而这个链上的过滤器在执行的时候会一个一个的执行,会先执行第一个Filter,放行之后再来执行第二个Filter,如果执行到了最后一个过滤器放行之后,才会访问对应的web资源。在放行后访问完 web 资源之后还会回到过滤器当中,回到过滤器之后如有需求还可以执行放行之后的逻辑,放行之后的逻辑我们写在doFilter()这行代码之后。访问完web资源之后,按照我们刚才所介绍的过滤器的执行流程,还会回到过滤器当中来执行过滤器放行后的逻辑,而在执行放行后的逻辑的时候,顺序是反着的。
2024-09-06 14:06:01 997
原创 过滤器Filter
在请求当中,都会在请求头中携带JWT令牌到服务端,而服务端需要统一拦截所有的请求,从而判断是否携带的有合法的JWT令牌。那怎么样来统一拦截到所有的请求校验令牌的有效性呢?这里我们会学习两种解决方案:Filter过滤器Interceptor拦截器我们首先来学习过滤器Filter。
2024-09-06 13:54:11 345
原创 Nginx反向代理和负载均衡
因为一般后台服务地址不会暴露,所以使用浏览器不能直接访问,可以把nginx作为请求访问的入口,请求到达nginx后转发到具体的服务中,从而保证后端服务的安全。因为nginx本身可以进行缓存,如果访问的同一接口,并且做了数据缓存,nginx就直接可把数据返回,不需要真正地访问服务端,从而提高访问速度。,根据webservers名称找到一组服务器,根据设置的负载均衡策略(默认是轮询)转发到具体的服务器。..这样的接口的时候,它会通过 location /api/ {} 这样的反向代理到。,故最终的请求地址为。
2024-08-31 21:56:37 864
原创 error pulling image configuration: download failed after attempts=6: dial tcp 59.188.250.54
原因是Docker镜像加速不行。执行以下命令即可解决。
2024-08-30 22:39:31 269
原创 为什么 PageHelper 不需要配置而 MP 需要?
配置复杂:由于 MP 提供了更多的功能,因此需要更多的配置来满足不同的需求。而 MP 是一个全面的 MyBatis 扩展工具,提供了多种功能,因此需要更多的配置来适应不同的应用场景。总结来说,PageHelper 旨在提供一个轻量级的分页解决方案,而 MP 则是一个功能更为丰富的 MyBatis 扩展框架,因此两者在配置上存在差异。独立插件:PageHelper 是一个独立的 MyBatis 分页插件,它的设计目标是尽可能简单地集成到现有的 MyBatis 应用中。
2024-08-29 22:03:03 329
原创 MybatisPlus
在刚刚的入门案例中,我们仅仅引入了依赖,继承了BaseMapper就能使用MybatisPlus,非常简单。当然,MybatisPlus不仅仅可以简化单表操作,而且还对Mybatis的功能有很多的增强。MybatisPlus会把PO实体的所有变量名驼峰转下划线作为表的字段名,并根据变量类型推断字段类型。但很多情况下,默认的实现与实际场景不符,因此MybatisPlus提供了一些注解便于我们声明表信息。MybatisPlus就是根据PO实体的信息来推断出表的信息,从而生成SQL的。修改mp-demo中的。
2024-08-26 20:41:37 1204
原创 Maven
Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性组织。Apache Maven是一个项目管理和构建工具,它基于项目对象模型(Project Object Model , 简称: POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。Maven的作用:方便的依赖管理统一的项目结构标准的项目构建流程。
2024-08-18 19:25:25 1016
原创 导出运营数据Excel报表
在数据统计页面,有一个数据导出的按钮,点击该按钮时,其实就会下载一个文件。这个文件实际上是一个Excel形式的文件,文件中主要包含最近30日运营相关的数据。表格的形式已经固定,主要由概览数据和明细数据两部分组成。真正导出这个报表之后,相对应的数字就会填充在表格中,就可以进行存档。导出Excel形式的报表文件。1.Controller层。导出最近30天的运营数据。
2024-08-18 15:02:40 455
原创 Apache POI
Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI 都是用于操作 Excel 文件。银行网银系统导出交易明细各种业务系统导出Excel报表批量导入业务数据。
2024-08-17 19:03:15 761
原创 销量排名top10统计
所以销量排名其实指的就是菜品和套餐销售的数量排名。通过柱形图来展示销量排名,这些销量是按照降序来排列,并且只需要统计销量排名前十的商品。所谓销量排名,销量指的是商品销售的数量。项目当中的商品主要包含两类:一个是。根据时间选择区间,展示销量前10的商品(包括菜品和套餐)基于可视化报表的柱状图降序展示商品销量。此处的销量为商品销售的份数。1.Controller层。
2024-08-17 13:34:18 305
原创 订单统计
订单统计通过一个折现图来展现,折线图上有两根线,这根蓝色的线代表的是订单总数,而下边这根绿色的线代表的是有效订单数,指的就是状态是已完成的订单就属于有效订单,分别反映的是每一天的数据。上面还有3个数字,分别是订单总数、有效订单、订单完成率,它指的是整个时间区间之内总的数据。展示所选时间区间内的有效订单数、总订单数、订单完成率,订单完成率 = 有效订单数 / 总订单数 * 100%基于可视化报表的折线图展示订单数据,X轴为日期,Y轴为订单数量。根据时间选择区间,展示每天的订单总数和有效订单数。
2024-08-16 18:40:25 335
原创 用户统计~
用户统计业务通常涉及收集、分析和报告用户在网站、应用或其他平台上的行为数据。这类业务对于了解用户习惯、优化产品体验、制定营销策略等方面至关重要.基于可视化报表的折线图展示用户数据,X轴为日期,Y轴为用户数。根据时间选择区间,展示每天的用户总量和新增用户量数据。1.Controller层。
2024-08-16 14:21:48 374
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人