介绍 PlantUML是一款开源的UML图绘制工具,支持通过文本来生成图形,使用起来非常高效。可以支持时序图、类图、对象图、活动图、思维导图等图形的绘制。
官方文档:https://plantuml.com/zh/
安装 推荐使用Docker进行安装
Pull the PlantUML Docker Image
1 docker pull plantuml/plantuml-server:jetty
Run the PlantUML Server Container
1 docker run -d -p 8886:8080 plantuml/plantuml-server:jetty
注:
1 2 3 4 5 6 7 8 9 10 docker run -d --restart=always --name 设置容器名 使用的镜像 (上面命令 --name后面两个参数根据实际情况自行修改) # Docker 容器的重启策略如下: --restart具体参数值详细信息: no // 默认策略,容器退出时不重启容器; on-failure // 在容器非正常退出时(退出状态非0)才重新启动容器; on-failure:3 // 在容器非正常退出时重启容器,最多重启3次; always // 无论退出状态是如何,都重启容器; unless-stopped // 在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。
Access PlantUML Server
浏览器访问:http://localhost:8886/plantuml
使用示例 时序图 时序图(Sequence Diagram),是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。通常,在系统的Oauth2的时候,第一步就是需要搞懂Oauth2的流程,这时候有个时序图就非常必要。下面我们使用PlantUML来绘制Oauth2中使用授权码模式颁发令牌的时序图。
下面通过PlantUML提供的语法来生成Oauth2的时序图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 @startuml title Oauth2令牌颁发之授权码模式 actor User as user participant "User Agent" as userAgent participant "Client" as client participant "Auth Login" as login participant "Auth Server" as server autonumber user->userAgent:访问客户端 activate userAgent userAgent->login:重定向到授权页面+clientId+redirectUrl activate login login->server:用户名+密码+clientId+redirectUrl activate server server-->login:返回授权码 login-->userAgent:重定向到redirectUrl+授权码code deactivate login userAgent->client:使用授权码code换取令牌 activate client client->server:授权码code+clientId+clientSecret server-->client:颁发访问令牌accessToken+refreshToken deactivate server client-->userAgent:返回访问和刷新令牌 deactivate client userAgent--> user:令牌颁发完成 deactivate userAgent @enduml
用例图 用例图(Usecase Diagram)是用户与系统交互的最简表示形式,主要用于展现用户和与他相关的用例之间的关系。通过用例图,我们可以很方便地表示出系统中各个角色与用例之间的关系。
下面通过PlantUML语法生成用例图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @startuml left to right direction actor Guest as g package Professional { actor Chief as c actor "Food Critic" as fc } package Restaurant { usecase "Eat Food" as uc1 usecase "Pay For Food" as uc2 usecase "Drink" as uc3 usecase "Review" as uc4 } g--> uc1 g--> uc2 g--> uc3 fc--> uc4 @enduml
类图 类图(Class Diagram)可以表示类的静态结构,比如类中包含的属性和方法,还有类的继承结构。
下面通过PlantUML语法生成类图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @startuml class Person { # String name # Integer age + void move() + void say() } class Student { - String studentNo + void study() } class Teacher { - String teacherNo + void teach() } Person <|-- Student Person <|-- Teacher @enduml
活动图 活动图(Activity Diagram)通常用于表示业务流程,比如电商中的下单流程,例如电商项目中购物车中生成确认单的流程。
下面通过PlantUML语法生成活动图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 @startuml title 生成确认单流程 start :获取购物车信息并计算好优惠; :从ums_member_receive_address表中\n获取会员收货地址列表; :获取该会员所有优惠券信息; switch(根据use_type判断每个优惠券是否可用) case(0) :全场通用; if (判断所有商品总金额是否\n满足使用起点金额) then (否) :得到用户不可用优惠券列表; stop endif case(-1) :指定分类; if (判断指定分类商品总金额\n是否满足使用起点金额) then (否) :得到用户不可用优惠券列表; stop endif case(-2) :判断指定商品总金额是否满足使用起点金额; if (判断指定分类商品总金额\n是否满足使用起点金额) then (否) :得到用户不可用优惠券列表; stop endif endswitch :得到用户可用优惠券列表; :获取用户积分; :获取积分使用规则; :计算总金额,活动优惠,应付金额; stop @enduml
思维导图 思维导图(Mind Map),是表达发散性思维的有效图形工具,它简单却又很有效,是一种实用性的思维工具。
下面通过PlantUML语法生成思维导图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 @startmindmap +[#17ADF1] mall学习路线 ++[#lightgreen] 推荐资料 ++[#lightblue] 后端技术栈 +++_ 项目框架 +++_ 数据存储 +++_ 运维部署 +++_ 其他 ++[#orange] 搭建项目骨架 ++[#1DBAAF] 项目部署 +++_ Windows下的部署 +++_ Linux下使用Docker部署 +++_ Linux下使用Docker Compose部署 +++_ Linux下使用Jenkins自动化部署 --[#1DBAAF] 电商业务 ---_ 权限管理模块 ---_ 商品模块 ---_ 订单模块 ---_ 营销模块 --[#orange] 技术要点 --[#lightblue] 前端技术栈 --[#lightgreen] 进阶微服务 ---_ Spring Cloud技术栈 ---_ 项目部署 ---_ 技术要点 --[#yellow] 开发工具 --[#lightgrey] 扩展学习 @endmindmap
部署图 部署图(deployment diagram,配置图)是用来显示系统中软件和硬件的物理架构。从部署图中,您可以了解到软件和硬件组件之间的物理关系以及处理节点的组件分布情况。使用部署图可以显示运行时系统的结构,同时还传达构成应用程序的硬件和软件元素的配置和部署方式。
下面通过PlantUML语法生成部署图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @startuml actor actor agent agent artifact artifact boundary boundary card card cloud cloud component component control control database database entity entity file file folder folder frame frame interface interface node node package package queue queue stack stack rectangle rectangle storage storage usecase usecase @enduml