
技术
childhoodEnd
前抖音程序猿
展开
-
【微服务】社区项目微服务改造错误记录—— 多模块测试
概述:多模块测试时,引入其他的 client 会导致无法找到bean生成 fail to load Application 错误解决方案:放大包的扫描范围@EnableFeignClients(basePackages = {"com.community"})public class UserTest{....解决方案详细链接...原创 2020-12-07 08:41:09 · 103 阅读 · 0 评论 -
【微服务】社区项目微服务改造错误记录——API与SVC路由
问题概述路由方面,首先是从 Api 中的 client 创建出问题再到了 404 又到了 500,最后又是 404 ,记录一下过程问题。一. Client 创建问题这个问题的错误在于,定义了 @FeignClient 参数后,对于方法参数的要求变细了Post 和 Get 方法都需要指定的参数注解Post 方法参数必须只有一个 @RequestBody即,你的多个参数必须封装到一个实体中我说别人的项目怎么一堆 Dto个人偷了个懒,将数个 Dto 给合并了,因为是练手项目嘛下面展示一个 De原创 2020-12-03 09:46:18 · 295 阅读 · 0 评论 -
【Java】Leetcode1039 多边形三角剖分
题目:给定 N,想象一个凸 N 边多边形,其顶点按顺时针顺序依次标记为 A[0], A[i], …, A[N-1]。假设您将多边形剖分为 N-2 个三角形。对于每个三角形,该三角形的值是顶点标记的乘积,三角剖分的分数是进行三角剖分后所有 N-2 个三角形的值之和。返回多边形进行三角剖分后可以得到的最低分。示例 1:输入:[1,2,3]输出:6解释:多边形已经三角化,唯一三角形的分数为 6。思路:类似戳气球题目但与其相反,选择最小值解题思路类似,将范围从小到大计算,即 i j 之间的间距原创 2020-12-02 09:23:06 · 355 阅读 · 0 评论 -
【微服务】Spring 多模块下的整体路由构建
综述今天在对之前的 community 项目进行微服务化改造。记录一下创建整个微服务项目需要注意的点创建微服务项目时一个大的父 Spring 项目包含许多小的 子 Spring 项目创建时使用正常的 Spring initializr 即可但需要注意对 artifactId ,groupId,version 三个参数的设置,这关系到后续的模块路由另,api 模块和 svc 模块的包名需配置相同,方便引用。创建完父项目后,需要对父项目的 pom 文件进行修改主要是配置子项目的参数与子项目原创 2020-11-30 16:27:15 · 244 阅读 · 0 评论 -
【微服务】Staffjoy 项目源码解析(十)—— Faraday 模块
一. 架构分析Faraday 模块 属于网关,其代码结构与普通的 MVC 设计不同下面为大致功能分配图请将上面两张表互相参照着理解路由解析:ReverseProxyFilter路由映射表:MappingsProviderHttp映射表:HttpClientProvider请求截获器:PreForwardRequestInterceptor响应截获器:PostForwardResponseInterceptor请求转发:RequestForwarder负载均衡:LoadBalancer原创 2020-11-23 18:03:09 · 639 阅读 · 0 评论 -
【微服务】Staffjoy 项目源码分析(九)—— Web 模块()
一. 架构设计今天试一试竖版构图,从右到左嗷。右侧是页面的构造类,每个类对应一个具体类的构造方法,Page 则为一个标准类模板PageFactory 中存储了诸多类的调用方法,调用后反应对应数据对象其余差不多,具体看下面的分析二. 代码解析具体页面类构造方法展示一个,其余大同小异 @Builder(builderMethodName = "childBuilder") public ActivatePage(String title,原创 2020-11-22 10:53:54 · 338 阅读 · 0 评论 -
【微服务】Staffjoy 项目源码解析(八)—— WhoAmI 模块
一. 架构设计简单明了,没啥好说的二. 代码分析方法也不多,就一个判断权限的方法需要分析。即 findWhoIAm 方法代码如下 public IAmDto findWhoIAm(String userId) { IAmDto iAmDto = IAmDto.builder() .userId(userId) .build(); GetWorkerOfResponse workerOfRes原创 2020-11-21 10:05:58 · 162 阅读 · 0 评论 -
【微服务】Staffjoy 项目源码解析(七)—— Company 模块(2)
一. 模型分析因为 Company 模块较复杂,数据模型有七个,故进行详细分析,以促进理解。七个模型包括额外的 (Account)账户 模型的关系如上图所示,下面进行具体分析Company:公司 数据模型,是整个数据结构的基础。Admin:管理员 数据模型,与公司是多对一的关系,与账户是一对一的关系属于账户和公司的连接桥梁查找时是通过 公司 id 和 账户 id 找到对应的 员工目录(Directory)数据作为 Admin 调用Directory:员工目录 数据模型是连接账户与公司原创 2020-11-21 09:18:54 · 156 阅读 · 0 评论 -
【微服务】Staffjoy 项目源码解析(六)—— Company 模块
一. 架构设计这个 Company 模块的架构复杂度相较之前的情况又上了一筹。上图估计很难看清楚,还是我去掉了 AppConfig 之类的不关键模块的基础上。但还是有层次可分。除了设定好的 Model 类外,类间可大致分为四层。最底层,数据库接口层,提供七种数据对象与数据库的交互。然后是 ServiceHelper 和 ShiftHelper 这俩辅助服务类。特别是 ServiceHelper,可以说是其他 Service 的基础。而 PermissionService 则是在每个 Con原创 2020-11-19 19:10:20 · 247 阅读 · 0 评论 -
【微服务】Staffjoy 项目源码解析(五)—— Account 模块
一. 架构设计省略了 Swagger (自动文档生成工具)配置类。二. 代码分析大工程开始了。基本架构还是比较清晰的。由上图可知,在之前的基本架构基础上,因为有了数据库,所以有了 Repo 层。两个类都是继承了 JPA 接口的接口类。类中的方法符合 JPA 接口的定义,不需写具体的 SQL 语句。细节属于微服务核心思想外,暂不细说(还没研究)大致就是只要方法名符合定义规则,能自动实现语句。两个接口类,一个 AccountRepo 是负责查询 Account 信息另一个 Account原创 2020-11-18 09:58:22 · 696 阅读 · 1 评论 -
【微服务】Staffjoy 项目源码解析(四)—— Bot 模块
一. 架构设计上面的图片在 API 处有省略数个不同 数据模型,具体请自行查看源码二. 代码分析首先,是 BotClient 这个唯一的接口。接口将三个 Controller 的方法综合防在了一起,对外提供接口调用。相同的 Controller 的方法大同小异,各举一个例子 @PostMapping(path="sms_greeting") BaseResponse sendSmsGreeting(@RequestBody @Validated GreetingRequest r原创 2020-11-17 10:36:36 · 537 阅读 · 1 评论 -
【微服务】Staffjoy 项目源码解析(三)—— Mail 模块
一. 架构设计Mail 模块与 SMS 模块的区别不大,都是简单的 MVC 前后端分离架构,我只对不同的地方进行讲解。二. 代码分析接口方面与 Sms 模块的区别在于,没有了头部的验证,直接将请求传过来即可。 @PostMapping(path = "/send") BaseResponse send(@RequestBody @Valid EmailRequest request);而数据对象方面,区别在于,虽然有目标地址,其他元素就不同了,包括,标题,主题,用户名。原创 2020-11-16 18:12:42 · 456 阅读 · 0 评论 -
【微服务】Staffjoy 项目源码解析(二)—— SMS 模块
一. 架构设计微服务模块所有的架构设计都是分成 API 与 SVC 两个包来设计。API 接口模块内会包含对外的接口及接口中会使用的数据模型。而 SVC 模块中则包含项目的主要代码。本 SMS 模块负责短信发送的处理。所以,只有一个主要的发送方法。结构较为基本而清晰。二. 代码分析2.1 sms-apiSmsClient 内只含有一个 send 方法,参数为服务类型数据和 SmsRequest 对象。返回一个 BaseResponse 对象(内涵一个 message(String),一个原创 2020-11-16 11:50:17 · 530 阅读 · 0 评论 -
【微服务】Staffjoy 项目源码解析(一)—— 项目概述
一. 开篇综述本系列博客是本人为了彻底理解 Staffjoy 项目的源码进行的基于费曼学习法的尝试。如有错误处请各位多多指正。二. 项目描述Staffjoy 项目是同名公司生产的一个基于微服务的排班系统流程。其公司倒闭后,代码开源。由于其项目代码较为简单明了,又符合微服务项目的整体框架,所以适用于初学者。源代码是由 Golang 语句写出。本人分析的是由[杨波先生改写的 SpringBoot版本(Download 请点击)](https://github.com/spring2go/staf原创 2020-11-16 08:43:13 · 1072 阅读 · 0 评论 -
Java 死锁范例
public class DeadLock { public static String resource1 = "resource1"; public static String resource2 = "resource2"; public static void main(String[] args){ Thread thread1 = new Thread(new One()); Thread thread2 = new Thread(new Two().原创 2020-08-20 08:28:01 · 113 阅读 · 0 评论 -
Java 读写锁范例 官方版
Java Api ReentranReadWriteLock 自带实例代码:class CachedData { Object data; volatile boolean cacheValid; ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); void processCachedData() { rwl.readLock().lock();//@1 if (!cacheValid) {原创 2020-07-26 14:58:21 · 429 阅读 · 0 评论 -
Java 代理模式小结
一. 概述代理(Proxy)是一种设计模式,提供对目标对象的额外访问方式。通过代理,就可以在目标对象方法的基础上添加新的方法。二. 静态代理逻辑代理对象和目标对象同时继承父类或调用接口代理对象生成时传入对象参数代理对象在自身的接口方法重写中,调用目标对象方法,织入增强语句范例/** * 接口 */public interface IUserDao { void save();}/** * 接口实现 * 目标对象 */public class UserDao i原创 2020-07-17 10:39:12 · 173 阅读 · 0 评论 -
常见设计模式小结
一 . 总概念设计模式是对代码开发经验的总结。二 . 单例模式概念: 一个类只有一个实例对象,无法使用 new 手动创建实例 构造器被 private 修饰,获得引用必须调用 getInstance 方法 Spring 中的 Bean 默认为单例范例:饿汉式public class Singleton{ private static Singleton instance = new Singleton(); private Singleton() {}; public static原创 2020-07-16 16:45:21 · 114 阅读 · 0 评论 -
HashMap 源码小结
原创 2020-07-14 11:23:39 · 82 阅读 · 0 评论 -
Redis 总结 思维导图太大贴不上来
Java面试:Redis概念一个开源的使用 C 语言编写的支持网络,可基于内存也可持久化的日志型,key - value ,NoSQL数据库数据存在内存中,间隔一段时间使用快照持久化备份数据到硬盘Spring 项目中注意点整合了一个 RedisTemplate 配置类来访问 Redis需要在 application.properties 中配置选择哪个数据库,ip,端口自带的 RedisTemplate 的 key 是 Object 类型,影响使用,重写成了 String 类型使用点赞功原创 2020-07-03 16:47:17 · 261 阅读 · 0 评论 -
MyBatis 总结
概念: 一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身Mybaits的优点: 基于SQL语句编程,相当灵活,不会影响原有设计 SQL写在XML里,解除sql与程序代码的耦合 提供XML标签,支持编写动态SQL语句,并可重用。 与JDBC相比代码量少很多,不用手动开关连接 很好的与各种数据库兼容 能够与Spring很好的集成; 提供映射标签,支持对象与数据库的ORM字段关系映射MyBatis框架的缺点: SQL语句的编写工作量较大 SQL语句依赖原创 2020-06-17 17:08:30 · 156 阅读 · 0 评论 -
Kafka 总结
Kafka 总结总概念 一个分布式的发布订阅模式的消息系统优点 1.可以缓冲数据,让突然暴涨的数据能被暂缓处理得到消化。 2.解耦,让消息队列成为一个借口,不需要和具体代码纠缠起来。 3.异步通信,放入消息队列后就可以处理其他事情 4.高吞吐量:可以支持每秒数千条消息的消息吞吐量。 5.低延迟:具有毫秒级的极低延迟 6.容错:Kafka能够抵抗集群中的节点/机器故障。 7.耐久性:由于Kafka支持消息复制,因此消息永远不会丢失 8.可扩展性:卡夫卡可以扩展,而不需要通过添加额外的节点原创 2020-06-16 15:54:54 · 235 阅读 · 0 评论