自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 企业中台化落地:从战略分析到战术实践及架构演进过程

谈及中台,大都雾里看花,抱有一份敬畏之心,恐误导众人。但愿通过自己的思考与一同思考实践的朋友们一些启发,让中台建设得到它应有的收益,总结出更多的成功经验。最近接触到一些公司说在做中台,交流之后大都是应该使用什么样的技术,如何解决数据一致性问题等。其中公司发展时间有长有短,有十几二十年的传统企业,也有三四个月才起步的创业团队。交流下来心中不免有些担忧,不太清楚所谓中台是追求一种技术实现还是一个流行噱头。经过较长时间的思考、学习和实践,我发现了解得越多越不敢讲自己做的称之为中台。它是一种企业级业务构架设.

2020-09-13 08:54:58 731

原创 EBean ORM 框架介绍-3.实体草稿功能

前文《EBean ORM 框架介绍-2.字段加密、更新日志和历史记录》 介绍了不少特性注解,本文将介绍实体草稿功能草稿功能主要用于一些需要进行流程审批或重复修改后的重要内容发布,先打草稿确认没有问题后再行发布的场景。此实现方案较以往完全自主实现最大的区别在于草稿与正式版数据结构相互独立,程序逻辑却为一体一、设置草稿@Draftable@Builder@Data@Entity@ToString(callSuper = true)@AllArgsConstructor@NoArgsConst

2021-06-24 14:29:11 235

原创 EBean ORM 框架介绍-2.字段加密、更新日志和历史记录

前文《Ebean ORM框架介绍-1.增强注解》介绍了一些特性注解,本文继续介绍一些注解的高级功能一、@Encrypted字段加密使用@Encrypted注解简单实现对数据库字段进行加密解密,以达到保护重要数据的作用,如下phone字段1. 使用数据库加密public class User extends BaseModel { @DbComment("the name") private String name; @Encrypted private Stri

2021-06-07 15:50:37 1195

原创 Ebean ORM框架介绍-1.增强注解

在了解Ebeam框架之前,一直都在使用JPA作为Spring Boot的ORM框架。JPA用起来比较简单的,对对象的增删改操作,几乎完全不需要接触SQL语句,更适合领域驱动设计的建模方法。但对一些非业务操作的技术处理和查询尤其是复杂查询的支持较弱,这也是有人选择Mybatis的重要原因。Ebean ORM框架,可以说几乎支持所有的JPA的功能同时也兼顾了Mybatis的灵活性,并且还有一些较实用的增加功能。本系列文章将一一介绍Ebean特有的较实用的功能。今天介绍Ebean的增强注解功能。ebean文档

2021-02-07 09:22:33 1205 2

原创 DDD分层架构最佳实践

还在单体应用的时候就是分层架构一说,我们用得最多的就是三层架构。而现在已经是微服务时代,在微服务架构模型比较常用的有几个,例如:整洁架构,CQRS(命令查询分离)以及六边形架构。每种架构模型都有自己的应用场景,但其核心都是“高内聚低耦合”原则。而运用领域驱动设计(DDD)理念以应对日常加速的业务变化对架构的影响,架构的边界越业越清晰,各施其职,这也符合微服务架构的设计思想。以领域驱动设计(DDD)为理念的分层架构已经成为微服务架构实践的最佳实践方法。一、什么是DDD分层架构1. 传统三层架构要了解DD

2021-01-21 09:09:34 1131 1

原创 SpringCloud 微服务实现数据权限控制

前章讲了如何进行用户权限验证《SpringCloud下的用户鉴权方案》,它是微服务下统一资源访问权限的控制,就像一道墙保护着SpringCloud集群下的各个业务应用服务。而本章要讲的是权限控制的另一个层面数据权限,意思是控制可访问数据资源的数量。举个例子:有一批业务员跟进全国的销售订单。他们被按城市进行划分,一个业务员跟进3个城市的订单,为了保护公司的业务数据不能被所有人都掌握,故每个业务员只能看到自己负责城市的订单数据。所以从系统来讲每个业务员都有访问销售订单的功能,然后再需要配置每个业务员负责的

2021-01-11 10:11:05 4596 1

原创 使用Spring Cloud Stream玩转RabbitMQ,RocketMQ和Kafka

前一章我们讲了《SpringBoot RabbitMQ消息队列的重试、超时、延时、死信队列》,从代码层面引用了非常多的rabbit特征代码,如:rabbitTemplate.convertAndSend(),@RabbitListener(queues = "xxx")等,都是很简单的代码看起来一切都是合理的,但隐约感觉代码遭到了入侵。业务的发展对MQ的依赖越来越重,地位也越来越高,对它的需求也越来越多。比如顺序消费,事务消息,回溯消费等,性能方面也有更高要求。越来越多的趋势提醒我们有更好MQ方案。假如

2020-09-27 10:29:27 1364

原创 SpringCloud轻松集成Dubbo实现RPC调用

很久之前在做微服务架构选型的时候就听说阿里的微服务RPC框架dubbo,当时与Spring Cloud以http协议调用的架构做对比。发现dubbo的rpc框架学习成本较高,代码入侵性强,本身生态不完整,需要整合多个外部组件,故选择了相对性能弱一点的Spring Cloud全家桶。直到Spring Cloud Alibaba的出现,使用Nacos作为服务发现与注册,同时兼容使用Feign的http方式和使用Dubbo的rpc方式调用。Spring Cloud 为什么需要RPC在Spring Clou

2020-09-06 11:06:17 1159 1

原创 SpringBoot RabbitMQ消息队列的重试、超时、延时、死信队列

今天介绍使用SpringBoot实现RabbitMQ消息队列的高级用法。MQ安装自动创建消息重试消息超时死信队列延时队列一、RabbitMQ的安装众所周知,RabbitMQ的安装相对复杂,需要先安装Erlang,再按着对应版本的RabbitMQ的服务端,最后为了方便管理还需要安装rabbitmq_management管理端插件,偶尔还会出现一些安装配置问题,故十分复杂。在开发测试环境下使用docker来安装就方便多了,省去了环境和配置的麻烦。1. 拉取官方imagedocker p

2020-08-31 17:38:55 3586

原创 微服务下的用户鉴权方案

上一章讲了微服务下的用户身份认证《SpringCloud Gateway 身份认证》,这次主要讲如何进行鉴权。相对上一章的身份认证代码略有改动Java下常用的安全框架主要有Spring Security和shiro,都可提供非常强大的功能,但学习成本较高。在微服务下鉴权多多少少都会对服务有一定的入侵性。为了降低依赖,减少入侵,让鉴权功能相对应用服务透明,我们采用网关拦截资源请求的方式进行鉴权。一、整体架构用户鉴权模块位于API GateWay服务中,所有的API资源请求都需要从此通过。做身份

2020-08-27 16:40:39 2109

原创 SpringCloud Gateway 身份认证

文章目录一、微服务架构二、实现路由转发1. 引入gateway包2. 添加启动类3. 配置路由表三、实现身份认证1. 用户登陆保存session状态2. 增加**AuthCheckFilter**,拦截路由请求3. 配置Filter三、完整代码请关注我的公众号使用SpringCloud技术栈搭建微服务集群,可以选择的组件比较多,由于有些组件已经闭源或停更,这里主要选用spring-cloud-alibaba作为我们的技术栈。服务注册与发现: nacos-discovery统一配置管理:nacos-c

2020-08-19 11:58:08 2188 1

原创 领域建模的贫血模型与充血模型

领域建模是通过识别领域对象与行为来连接与现实世界业务主体与操作的映射关系。对象与行为的组织设计原则更体现面向对象设计的思想,通过聚合、解耦、抽象、组合等多种设计方式达到系统可复用,可维护,易扩展的能力。在实际程序代码设计中,由于语言、结构、技术的不一样对领域建模代码落地也有所不同,且各有优缺点。一、贫血模型此种模型下领域对象的作用很简单,只有所有属性的get/set方式,以及少量简单的属性值转换,不包含任何业务逻辑,不关系对象持久化,只是用来做为数据对象的承载和传递的介质。@Entity@Data

2020-08-03 14:09:15 540

原创 使用领域驱动设计分析业务

开发人员在需求拿到之后,写代码前需要对项目进行需求分析和系统设计。一些业务逻辑和流程较复杂的项目,如何即能快速地抓住重点,清晰理解需求,又能设计出具体扩展性的系统架构呢?答案是使用领域驱动设计,以下是引用网上对此的一段描述:领域驱动设计是一种针对大型复杂系统的领域建模与分析方法。它完全改变了传统软件开发工程师针对数据库进行的建模方法,从而将要解决的业务概念和业务规则转换为软件系统中的对象以及对象的属性与行为,通过合理运用面向对象的封装、继承和多态等设计要素,降低或隐藏整体系统的业务复杂性,并使得系统具有

2020-06-21 16:13:15 416

原创 中台改造,我之拙见

中台是个啥中台是个啥,感觉是一个很复杂的东西。网上很多相关的文章,但好像越说越复杂,并没有一个统一的定义。我从18年一个阿里背景的到企业来做项目推广时第一次听到中台一词。“中台?”我以为听错了,我只听到“前台”“后台”,“中台”又是个啥?后来在网上了解了一下,感觉挺高大上的,由此对它越来越有兴趣。经过一些人的不断鼓动,领导也觉得好像是可以做的事情,好像收益也不错,便决定我们来做中台吧。我们没有经验得请一个第三方公司来做,期间我们见了好几种类型的外包公司,有理念很强想咨询的,有理念一般想推产品的,还有更

2020-06-06 12:58:07 480

原创 架构师如何对待不会的技术问题

文章目录认清自己学习是一种习惯兴趣是最好的驱动力在实践中加强学习能力比知识点更重要提升知识的眼界最后对于从小厂基层一步一步成长起来的架构师,技术经验不够全面,如何面对面试大厂时对方提出的自己不会的技术问题呢?从小厂基层成长起来的架构师,技术经验基本上都是从实践中获得。而主动学习,翻阅文献吸收回来的东西,在公司体量和环境的实际限制下大多也停留在理论基础上,没有实践不一定深刻,如何改变这样的状态呢?架构师涉略的知识面可为非常全面的,现在获取知识也越来越便捷,博客、公众号比比皆是,有写面试题的,有写经验分

2020-05-30 18:28:19 159

原创 微服务下技术实践思考 -- 业务与应用架构设计

企业级微服务架构设计实践需要从宏观到微观层面的思考,主要分为业务架构、应用架构、技术架构和开发设计方法论。一、业务架构思考要建设企业的信息系统首先要明确系统的需求,而要制定系统需求则首先要明确系统对于企业来讲要解决哪些问题,哪些参与对象以及如何参与,然后再考虑如何使用信息化手段来优化提升生产力,这就是业务架构需要解决的问题。1. 业务领域识别主要明确业务操作的业务主体,业务功能,和业务边界...

2020-04-09 22:37:16 194

原创 6. 基于Spring Data的领域事件发布

领域事件发布是一个领域对象为了让其它对象知道自己已经处理完成某个操作时发出的一个通知,事件发布力求从代码层面让自身对象与外部对象解耦,并减少技术代码入侵。一、 手动发布事件// 实体定义@Entitypublic class Department implements Serializable { @Id @GeneratedValue(strategy = Generat...

2020-04-02 08:53:54 388

原创 5. JPA对象继承关系

文章目录一、对象建模二、Repository设计1. 查询2. 写入和删除三、Repository查询语句分析1. `InheritanceType.SINGLE_TABLE` 构建单表模式2. `InheritanceType.TABLE_PER_CLASS`构建独立表模式3. `InheritanceType.JOINED`构建关联表模式四、适用场景五、源代码在实体建模过程中,有些实体会有多...

2020-03-25 19:04:49 345

原创 4. JPA对象型属性操作

文章目录1. 使用`@OneToMany`做关联2. 使用`@Enumerated`保存枚举值3. 使用`@Embeddable`将子表字段合并到主表4. 使用`@AttributeOverride`重写字段名5. 使用`@Convert`做类型转换6. 使用抽象类属性7. 源代码领域驱动设计核心是领域对象识别,一切操作皆是对象,这也是面向对象编程所倡导的。在设计实体属性时,除了数据库能识别的标...

2020-03-20 10:49:14 278

原创 3. JPA对象关系映射 -- 级联操作

对象映射关系分为单向关系和双向关系,单向关系只在一方对象上存在对方对象,双向关系是在双方对象上存在彼此对象。一、单向关系public class Department implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer depa...

2020-03-17 22:04:46 267

原创 2. JPA对象关系映射--值对象映射

在领域驱动设计中,有一些结构主表和明细表必须一起显现才能表达业务意义,明细表不能单独使用被称为值对象,主表表达业务对象称为实体,也称为聚合根。1. 在实体中的值对象上增加@OneToMany注解@Data@Entitypublic class SaleOrder { @Id @GeneratedValue(strategy = GenerationType.IDENTIT...

2020-03-11 08:57:09 349

原创 人生第一博

正所谓“万事开头难”,作为35+“老程序”的我一两年前早就开始说准备写文章,而时至今日才真实开了这个头。我是一个理科生,对写作完全没有天赋,一点文采都没有。也就是觉得从业了10多年了,总是应该有点沉淀,有一点积累吧,也不能总是所有东西都在心里,真正想用的时候又想不起。我是一个做一件会准备很多东西的事,总想是说一旦开始就应该朝预想的方向去发展,觉得很多外在的东西没有准备好,做出来的事情就不会有一...

2020-03-05 22:06:34 107

原创 1. JPA技术选型的思考

在做技术选型的时候是选JPA还是MyBatis,网上做对比的讨论非常多,双方也是各自有各自的好,谁也不能代替谁。以下是网上讨论的几点归纳:1. JPA更适配OO2. JPA熟悉后用起来很方便3. MyBatis灵活性高4. MyBatis性能更好5. 国内使用MyBatis比JPA多做技术选型时选择的是JPA,我对JPA比较熟,主要针对JPA来谈谈我的想法引用至【[持久层框...

2020-03-03 00:05:48 184

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除