JAVA
lrqforest
这个作者很懒,什么都没留下…
展开
-
解决多数据源事务不一致导致事务不生效问题
一般不建议开多数据源但是同事已经使用了,只能帮忙填下坑,在使用事务时提示XX表不存在然后写了个接口继承IServicepublic interface BaseService<T> extends IService<T> { /** * PROPAGATION_REQUIRED (默认) * 支持当前事务,如果当前没有事务,则新建事务 * 如果当前存在事务,则加入当前事务,合并成一个事务 * REQUIRES_NEW (一般用在子方法需要单独事务)原创 2020-12-10 15:00:30 · 1326 阅读 · 0 评论 -
两个微服务强关联且含有事务,一个成功,一个失败怎么办,分布式事务解决方案
今天被问到一个问题,就是如果有调用同时插入数据的微服务A和B,如果A成功,B不成功怎么办?首先从 业务上来分析:1.我们为什么要同时操作两个微服务来插入呢?2.是这两个微服务中有强依赖关系吗?是上一个插入成功下一个才能插入吗?那为何不直接在A服务里面写,调用B服务呢?值得深思,微服务的划分粒度是否有问题?如果两者不存在强依赖关系,使用MQ的ACK机制完全可以满足你,因为他们两者谁先插入都无所谓,重要消息不被确认会重试。如果真的存在那怎么处理?我提出一个方案:方案.1.定义一个变量,类型Ha原创 2020-11-19 15:08:32 · 708 阅读 · 1 评论 -
JAVA学习代码
阿里云短信 JAVA基础 WebSocket Demo elasticsearch Demo mongodb Demo rabbitmq Demo redis Demo shiro Demo springboot Demo freemarker Demo 多线程Demo传送门:https://github.com/CharlesQian18/java-demo/tree/master原创 2020-11-14 11:04:55 · 130 阅读 · 0 评论 -
第十六章 无状态登录
1.2.什么是无状态微服务集群中的每个服务,对外提供的都是Rest风格的接口。而Rest风格的一个最重要的规范就是:服务的无状态性,即:服务端不保存任何客户端请求者信息客户端的每次请求必须具备自描述信息,通过这些信息识别客户端身份带来的好处是什么呢?客户端请求不依赖服务端的信息,任何多次请求不需要必须访问到同一台服务服务端的集群和状态对客户端透明服务端可以任意的迁移和伸缩减小服务端存储压力1.3.如何实现无状态无状态登录的流程:当客户端第一次请求服务时,服务端对用户进行信息认证(登录)原创 2020-11-12 09:23:31 · 131 阅读 · 0 评论 -
第十五章 短信服务
阿里云短信接入开通短信创建子账号创建子账号的AccessKey创建短信签名创建模板示例链接: https://help.aliyun.com/document_detail/101893.html?spm=a2c4g.11186623.6.649.2fd650a4XPdZFk原创 2020-11-12 09:20:33 · 98 阅读 · 0 评论 -
第十四章 Redis
NOSQL= Not Only SQLRedis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting),原创 2020-11-12 09:18:28 · 153 阅读 · 1 评论 -
第十三章 RabbitMQ
目前我们已经完成了商品详情和搜索系统的开发。我们思考一下,是否存在问题?商品的原始数据保存在数据库中,增删改查都在数据库中完成。搜索服务数据来源是索引库,如果数据库商品发生变化,索引库数据不能及时更新。商品详情做了页面静态化,静态页面数据也不会随着数据库商品发生变化。如果我们在后台修改了商品的价格,搜索页面和商品详情页显示的依然是旧的价格,这样显然不对。该如何解决?这里有两种解决方案:方案1:每当后台对商品做增删改操作,同时要修改索引库数据及静态页面方案2:搜索服务和商品页面服务对外提供操作接原创 2020-11-12 09:12:33 · 105 阅读 · 0 评论 -
第十一章 linux共享文件samba安装与java读取外部文件夹方法
https://www.cnblogs.com/tangmj/p/5188765.htmlhttps://www.cnblogs.com/huanghuahui/p/11673532.html原创 2020-11-12 09:08:47 · 101 阅读 · 0 评论 -
第十章 模板引擎 Thymeleaf
2.2.1.概念先说下Thymeleaf中的几个概念:Context:运行上下文TemplateResolver:模板解析器TemplateEngine:模板引擎Context上下文: 用来保存模型数据,当模板引擎渲染时,可以从Context上下文中获取数据用于渲染。当与SpringBoot结合使用时,我们放入Model的数据就会被处理到Context,作为模板渲染的数据使用。TemplateResolver模板解析器:用来读取模板相关的配置,例如:模板存放的位置信息,模板文件名称,模板文原创 2020-11-12 09:08:14 · 3017 阅读 · 0 评论 -
第九章 Elasticsearch
Elasticsearch官网:https://www.elastic.co/cn/products/elasticsearch如上所述,Elasticsearch具备以下特点:分布式,无需人工搭建集群(solr就需要人为配置,使用Zookeeper作为注册中心)Restful风格,一切API都遵循Rest原则,容易上手近实时搜索,数据更新在Elasticsearch中几乎是完全同步的。使用容器安装 Elasticsearch拉取最新版本的镜像docker pull elasticsearch原创 2020-11-11 17:54:03 · 161 阅读 · 0 评论 -
第八章 商品数据结构和实现
一、spu概念 SPU = Standard Product Unit (标准化产品单元) SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。二、sku概念 SKU=stock keeping unit(库存量单位) SKU即库存进出计量的单位, 可以是以件、盒、托盘等为单位。 SKU是物理上不可分割的最小存货单元。在使用时要根据不同业态,不同管理模式来处理。在服装、鞋类商品中使用最原创 2020-11-11 17:33:13 · 332 阅读 · 0 评论 -
第七章 上传图片服务优化和FastDFS(分布式文件系统)
绕过网关缓存默认情况下,所有的请求都经过Zuul网关代理,默认会通过SpringMVC预先请求进行处理,缓存。普通请求并不会有什么影响,但是对于文件上传,就会造成不必要的网络负担。在高并发时,可能导致网络阻塞,Zuul网关不可用。这样我们的整个系统就瘫痪了。所以,我们上传文件的请求需要绕过请求的缓存,直接通过路由来到达目标微服务。Zuul is implemented as a Servlet. For the general cases, Zuul isembedded into the Sp原创 2020-11-11 17:26:29 · 225 阅读 · 0 评论 -
第六章 跨域问题
什么是跨域:跨域是指跨域名的访问,一下情况都属于跨域:跨域原因说明 示例域名不同 www.jd.com和 www.taobao.com域名相同,端口不同 www.jd.com:8080与www.jd.com:8081二级域名不同 item.jd.com 与 miaosha.jd.com2.为什么有跨域问题?跨域不一定会有跨域问题。因为跨域问题是浏览器对于ajax请求的一种安全限制:一个页面发起的ajax请求,只能是于当前页同域名的路径,这.原创 2020-11-11 17:15:26 · 142 阅读 · 0 评论 -
第五章 nginx
域名一个域名一定会被解析成一个或者多个IP,步骤包含1)本地域名解析浏览器会首先在本机的hosts文件中查找域名映射的IP地址,如果查找到就返回IP,没找到则进行域名服务器解析,一般本地解析都会失败,因为默认这个文件夹是空的。windows下的hosts文件地址: C:/Windows/System32/drivers/etc/hostsMac,Linux下的hosts文件所在的路径:/etc/hosts2)域名服务器解析本地解析失败,才会进行域名服务器解析,域名服务器就是网络中的一台计算.原创 2020-11-11 16:49:30 · 700 阅读 · 1 评论 -
第四章 搭建业务平台
调用异常处理服务端返回的异常统一到web层处理定义异常枚举类:@Getter@NoArgsConstructor@AllArgsConstructorpublic enum ExceptionEnum { PRICE_CANNOT_BE_NULL(400,"价格不能为空"); private int code; private String msg;}定义异常返回结果@Datapublic class ExceptionResult { private int .原创 2020-11-11 16:45:57 · 229 阅读 · 0 评论 -
第三章 搭建后端框架
第一步建立父工程:引入依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> <!--设定一个空值将始终从仓库中获取,不从本地路径获取--> <relativePa原创 2020-11-11 15:05:51 · 303 阅读 · 1 评论 -
第二章 前端搭建 webpack+vue-cli
webpack:本质上,webpack是一个现代javaScript应用程序的静态模板打包器(module bundler)。当webpack处理应用程序时,它会递归地构建一个依赖关系图,其中包括应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle作用:前端碎片文件太多,请求的次数太多,可以将多个碎片组合成一个相对大的文件减少请求次数各种简写的语言不能被浏览器识别,webpack编译成浏览器可以识别的语言浏览器语法降级,语法更新太快,浏览器跟不上代码混淆四个核心概念:入原创 2020-11-11 15:03:47 · 156 阅读 · 0 评论 -
第一章—电商项目技术特点和模式
技术特点:技术范围广2.技术新3.要求双高高并发(分布式,静态化技术,CDN服务,缓存技术,异步并发,池化,队列)高可用(集群,负载均衡,限流,降级,熔断)数据量大业务复杂常见电商模式:B2C :商家对个人(自己卖)C2C平台:个人对个人B2B平台:商家对商家O2O:线上和线下结合P2P:在线金融,贷款B2C平台:天猫,京东,一号店等技术架构图...原创 2020-11-11 15:03:01 · 564 阅读 · 1 评论 -
spring-boot中可以用@validated来校验数据
controller的方法添加 @Validated:public Result<?> add(@Validated @RequestBody WmsSysProduct wmsSysProduct).实体类属性添加注解 @NotBlank(message = "测试返回信息")private String descc;拦截运行时异常:```java@ControllerAdvicepublic class SharpBootException extends Runtim原创 2020-07-24 11:58:39 · 236 阅读 · 0 评论 -
JAVA语言开发环境搭建
JAVA跨平台:JVM (Java Virtual Machine):java 虚拟机三个版本的JVM(win版本,linux版本,mac)java语言是跨平台的,依靠jvm翻译2.2 JRE 和 JDKJRE(java Runtime Environment): 运行时环境,含有jvm和核心类库JDK(java Development Kit): java 开发工具包,包含JER环境和开发人员使用的工具运行已有的java程序,安装JER即可开发全新的java程序,必须安装JDKJDK&原创 2020-05-29 19:39:37 · 302 阅读 · 0 评论 -
第二章 WebSocket简单实现
HTTPhttp协议是短链接,因为请求之后,都会关闭连接,下次重新请求数据,需要再次打开链接WebSocke1.定义 :WebSocket 是HTML5的新协议,它实现了浏览器与服务器全双工通信(full-duplex),一开始的握手需要借助HTTP请求完成。WebSocket是真正实现了全双工通信的服务器项客户端推送的互联网技术。它是在一种单个TCP连接上进行全双工通讯协议。WebSocket通信协议与2011年被IEFT定为标准RFC6455,WebSocketAPI 被W3C定为标准。查询原创 2020-05-23 15:18:01 · 261 阅读 · 0 评论 -
第一章:引用概述 -短连接,长连接,短轮询,长轮询,流 SSE,websocket
一、短连接这里的连接指的是 TCP 连接。一个 TCP 连接从创建到结束一共有 3 个阶段,分别为“三次握手”建立连接、客户端与服务端进行数据包传输、“四次挥手”断开连接。客户端与服务端的每一次完整的消息交互(发请求——响应)都建立一次 TCP 连接,当这次交互完毕后就释放该 TCP 连接。这个过程就是短连接。早期的 http 1.0 用的就是短连接。优点:简单。因为存在的连接都是正在通信的有用连接,不需要过多的管理。 缺点:浪费资源,网络延迟较大。为什么有这样的缺点呢?通常来说,一转载 2020-05-23 15:14:36 · 392 阅读 · 0 评论 -
第八章 SpringCloud-Feign远程调用
Feign: 可以把Rest请求进行隐藏,伪装成为类似SpringMVC的controller一样,你不用再自己拼装url,拼装参数等等操作,一切都交给Feign去做项目主页: https//github.com/OpenFeign/feign实现:引入依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-op原创 2020-05-16 10:37:20 · 233 阅读 · 0 评论 -
第七章 SpringCloud-Hystrix熔断器
Hystrix: 翻译为豪猪,是一种保护机制,是Netflix公司的一款组件为什么要保护:雪崩问题:微服务中,服务间调用关系错综复杂,一个请求,可能需要调用多个微服务接口才能实现,会形成非常复杂的调用链路如果一个请求发生异常,请求阻塞,用户不会得到响应,则tomcat这个线程不会释放,于是越来越多的用户请求会导致越来越多的线程会阻塞服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其他的服务都不可用,形成雪崩效应解决方案:线程隔离服务熔断(降级)线程隔离,服务降原创 2020-05-16 10:35:06 · 198 阅读 · 0 评论 -
第六章 SpringCloud-Ribbon负载均衡
Ribbon 负载均衡负载均衡算法: 随机,轮询(Ribbon默认),hash,最小访问实现:1. 在消费者pom中添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency>2. 在restTemplate原创 2020-05-16 10:29:42 · 136 阅读 · 0 评论 -
第五章 SpringCloud-高可用的Eureka服务配置
高可用方案:1. Eureka 集群: 多开几个 Eureka 服务,相互注册IDEA-》Run/Debug Configurations 复制一个EurekaServer启动服务,命名为 EurekaServer2将EurekaServer1的注册地址改成 EurekaServer2 的地址将EurekaServer2的注册地址改成 EurekaServer1的地址客户端(包括Eureka注册中心),将所有的服务端地址配上,以免服务发生宕机时无其他服务可用相互注册后,信息将会同步当Eru原创 2020-05-16 10:25:24 · 225 阅读 · 0 评论 -
第四章 SpringCloud-Eureka注册中心
Eureka: 服务的注册中心(可以是一个集群),是独立的服务提供者:启动后想Eureka注册自己信息(地址,提供什么服务)消费者:想Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更更新心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态2. Eureka demo1. 引入依赖 <dependencies> <dependency> <groupId>org.springf.原创 2020-05-16 10:22:45 · 158 阅读 · 0 评论 -
第三章 SpringCloud简介和服务调用
SpringCloud 是Sping旗下的项目之一,官网:http://projects.spring.io/spring-cloud/把非常流行的技术整合在一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能,主要涉及组件:Eureka:注册中心Zuul:服务网关Ribbon:负载均衡Feign:服务调用Hystrix:熔断器准备工作:-- 创建mysql库create database `test-basedata` default char原创 2020-05-16 10:17:46 · 217 阅读 · 0 评论 -
第二章 SpringCloud-服务的调用
1. 服务的调用浏览器发起请求,会将准备好的资源发送给tomcat,tomcat 使用dispatcherServlet 转发,将结果返回到Response1. RPC1.1 Remote Produce Call 远程过程调用,类似的还有RMI。自定义数据格式,基于TCP通信,速度快,效率高。早起的webservice, 现在热门的dubbo,都是RPC的典型代表TCP:传输层,三次握手建立连接,四次挥手关闭连接,建立连接比较浪费资源RPC可以基于TCP建立长连接必须统一格式和语言,java对原创 2020-05-16 10:12:32 · 163 阅读 · 0 评论 -
第一章 SpringCloud-服务架构演变
这里写自定义目录标题服务架构演变流动计算架构服务架构演变水平拆分: 网站流量少,全部功能做在一个项目里面,高耦合性垂直拆分: 代码重复性高分布式服务:相互独立,又相互调用流动计算架构SOA,面向服务的架构注册中心:所有提供服务的人,服务的治理问题:3.1 服务有强依赖关系,容易引起雪崩3.2 关系复杂,运维,测试部署的困难微服务:单一职责:微服务中每一个服务对应唯一的业务能力,做到单一职责微:微服务的服务拆分粒度很小,服务虽小,但 五脏俱全自治: 自治原创 2020-05-16 10:07:47 · 153 阅读 · 0 评论