导图社区 在线文档
这是一篇关于在线文档的思维导图,主要内容包括:在线Office,脑图,白板、开源技术框架、在线文档、技术细节、日志专题、逻辑编排、Gradle。
编辑于2024-09-20 15:20:32开源技术框架
编程语言&容器
Web容器
Tomcat
Jetty
JBoss
Resin
负载均衡
LVS
Nginx
Reactive(响应式)编程
Akka
RxJava
vert.x
本地系统开发
JNA
运行期动态访问本地库(如:windows的DLL文件)
JVM
Adopt Open JDK
Graal
Open JDK
多版本java支持
jenv
在同一台机器中能支持不同应用使用不同版本的JDK
应用交互
MVC架构
Spring Framework
Spring Boot
微服务
Spring Cloud
HTTP客户端
Async Http Client
Feign
Retrofit
Rest接口设计与开发
Swagger
RPC
Dubbo
gRPC
网络架构
Netty
分布式协调
Zookeeper
数据存储
分布式存储
Ceph
HDFS
消息队列
Kafka
RocketMQ
Pulsar
RabbitMQ
缓存
Redis
Memcached
数据库
H2
SQLLite
MySQL
Oracle
SQL Server
PostgreSQL
数据库集群
MHA
分库分表
ShardingSphere
Mycat2
本地缓存
Encache
Caffeine
高性能队列
Disruptor
数据层架构
Mybatis
M'y'ba'tis-Plus
Hibernate
数据库连接池
HikariCP
Druid
Devops
代码质量检查
Checkstyle
Spotbugs
日志收集与分析
Filebeat
Logstach
Kibana
系统监控
Skywalking
zipkin
构建工具
Maven
Gradle
Bazel
日志记录
Log4j2
Logback
SLF4J
单元测试
JUnit
测试辅助
JMockit
Mockito
JMeter
Selenium
系统排错与调优
JMH
Arthas
工具
命令行参数解析
JCommander
定时任务调度
Quartz
Redis客户端
Jedis
Redission
爬虫相关
Nutch
Crawler4j
jsoup
webmagic
工具集合
Guava
Hutool
计算机视觉
JavaCV
分布式事务
Seata
JSON解析
Gson
Jackson
fastjson
二维码解析
ZXing
PDF处理
iText
Apache PDFBox
序列化格式
Avro
Thrift
Protobuf
模板引擎
Freemarker
Thymeleaf
Office文档处理
POI
代码生成
Lombok
属性映射
MapStruct
领域语言定制
ANTLR
安全相关
Shiro
Bouncy Castle
jjwt
数据参数校验
Hiernate Validator
搜索
Elasticsearch
配置文件解析
config
http://github.com/lightbend/config
大数据相关
Storm
Flink
Spark
HBase
ClickHouse
Doris
在线文档
白板
Excalidraw
https://github.com/excalidraw/excalidraw
脑图
kityminder-editor
https://github.com/fex-team/kityminder-editor?tab=readme-ov-file
在线Office
OnlyOffice
总体
官网地址:https://api.onlyoffice.com/editors/basic
中文文档:https://api.onlyoffice.com/zh/editors/example/java
理由:有商业版本和社区版本供选择,在社区版本搞不定的时候商业版本可以兜底
整个OnlyOffice分成几部分
DocumentServer
作用:做后端文档服务器,可以将已有文档上传到服务器上进行协同编辑
二次开发方式
提供了API方式,能与业务系统做实时/异步交互,允许业务侧将需要操作的文档送到文档服务器上,编辑完成之后能回调业务系统
提供了插件开发方式,能允许业务侧根据自己的需求开发在线编辑器的插件对文档进行操作
DocumentBuilder
作用:编辑/生成文档,通过Python、C++之类的语言,通过onlyoffice提供的包来操作各种office文档
安装
预先安装软件
Erlang(版本24.2)
https://erlang.org/download/otp_win64_24.2.exe
RabbitMQ(版本3.9.12)
https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.12/rabbitmq-server-3.9.12.exe
PostgreSQL(版本12.9+)
https://www.postgresql.org/download/windows/
windows安装
下载安装包
https://www.onlyoffice.com/download-docs.aspx?from=downloadintegrationmenu#docs-community
下载的文件是社区版本的:onlyoffice-documentserver.exe
预安装
certbot
PostgreSQL 12.17
RabbiteMQ 3.12.11
python 3.11.3
安装
1、在CMD下cd到下载目录,然后用onlyoffice-documentserver.exe /DS_PORT=8001,可以指定documentserver的主web端口是8001
2、开启样例应用
注册成windows服务开机自动运行:sc.exe config DsExampleSvc start=auto
手动启动样例应用:net start DsExampleSvc
3、安装完后启动地址
样例应用:http://localhost:8001/example/
主应用:http://localhost:8001/welcome/
4、启停都在Windows Service中
后端转换
ONLYOFFICE Document Server Converter
DsConverterSvc
文档操作主服务
ONLYOFFICE Document Server DocService
DsDocServiceSvc
样例服务
ONLYOFFICE Document Server Example
DsExampleSvc
代理服务(Nginx)
ONLYOFFICE Document Server Proxy
DsProxySvc
5、安装之后如果需要手动修改documentserver的端口,可以修改安装目录下nginx/conf/ds.conf文件
辅助说明
1、启动安装之前关闭360安全防护,其中有部分文件会被扫描出是病毒,被隔离之后没办法运行
2、安装时设置的DS_PORT参数最终作用到ngnix配置中,如果想后续手动改,直接到安装目录下修改ng配置
3、开启完之后,在服务端的windows防火墙入站规则中增加对应端口开放,远程就能访问了
使用
集成在线编辑器
DocOffice
帮助文档:https://api.onlyoffice.com/editors/basic
作用:在业务侧通过API和文档服务器进行交互,主要作用是进行集成,运行在业务侧代码中
需要使用Token
Token信息服务端配置在:config/local.json中services.CoAuthoring.secret.inbox.string
Token需要进行新JWT加密(可参考示例代码)
访问方式
访问自己部署的客户端应用时,必须使用onlyservice服务端能访问的IP,应该存在数据回调
比如:在客户端访问时使用http://localhost:4000/会报错:
操作在线编辑器
OfficeAPI
帮助文档:https://api.onlyoffice.com/officeapi/basic
作用:在js中结合Editor视图,操作office文档,插件开发过程中可以使用这些API,主要作用是操作在线编辑器,运行在文档服务器中
插件
作用:通过插件,能做编辑器上的逻辑扩展,在插件中能调用当前编辑器中的js API控制和操作文档内容
帮助文档:https://api.onlyoffice.com/plugin/basic
加载插件
1、将开发好的插件目录放到服务器插件目录下:documentserver\sdkjs-plugins\
2、重启docserver服务
3、重刷editor页面,会重新加载plugins清单,请求地址:http://10.128.4.102:8001/8.1.1-26/plugins.json,这个地址会返回可用的全量插件配置config.json文件
开发插件
官网提供了插件可参考:https://github.com/ONLYOFFICE/sdkjs-plugins.git
插件必须包含两个文件index.html 和 config.json
index.html:点击对应插件图标之后展现的主入口
config.json:插件的参数信息
实现插件中必须有两个方法
window.Asc.plugin.init
插件初始化会调用这个方法
window.Asc.plugin.button
点击插件之后展现界面里面的按钮处理逻辑
点击插件展现按钮在config.json中variations.buttons数组
方法中传入的参数是按钮的编号
在插件逻辑中通过执行window.Asc.plugin.executeMethod与编辑器进行交互
第一个参数:内置的方法名称
https://api.onlyoffice.com/plugin/executemethod,子目录中的方法都可以使用
第二个参数:方法入参,按数组传入
第三个参数:执行之后的回调方法
操作文档内容
1、按照officeapi的语法写脚本
2、调用插件方法window.Asc.plugin.executeCommand("command",脚本内容)
样例
修改界面
方式1
在线编辑界面是一个html页面,可以通过操作DOM来操作界面按钮是否可显示
样例
方式2
子主题
官网开源插件样例
example_add_content_controls
UUID
{CD4E451C-6928-43A4-B641-ECBBF688AC76}
效果
向在线编辑器中插入可输入控件
使用API
调用命令不同命令来插入不同的输入
AddContentControl
增加输入文本框
AddContentControlCheckBox
增加Checkbox
AddContentControlPicture
增加图片录入位置
AddContentControlList
增加下拉选框
AddContentControlDatePicker
增加日期控件
WOPI访问
MS Office online (WOPI)
https://api.onlyoffice.com/editors/wopi/
开启WOPI
文件地址:documentserver\config\local.json
配置项:wopi.enable
代码访问
示例
https://api.onlyoffice.com/zh/editors/demopreview?type=spreadsheet#DemoPreview
JDK仓库
https://github.com/ONLYOFFICE/docs-integration-sdk-java/releases/tag/v1.2.0
功能整理
在线文档能力
文档新增
文档转换
文档生成
在线协同能力
内容评论
业务模块对接
开源License
GNU AGPL v.3
使用这个就需要将自定义的部分也开源,咱们暂时不会去修改源代码,只是用来做插件开发,到时候插件开源即可
商业版本比对
使用社区版
1、连接数和在线人数限制,通过部署多台documentserver来处理
2、多台documentserver之间的路由由在线文档模块增加策略进行控制
功能诉求
操作人管理
文档管理
目录管理
目录新增
目录修改
标签管理
标签新增
标签修改
文档操作
文档新增
根据模版新增
文档上传信息
空白文档新增
文档存储
分目录存储
数据库表记录和文档存储关系解耦
本地存储/远程存储支撑
文档转储
转储策略
批量转储
归属目录管理
归属标签管理
文档权限
文档权限区分
查看
审阅
编辑
新增
备注新增
备注回复
权限级别
目录级
文件级
内容编辑
内容备注
选中内容进行备注
对其他人的备注做回复
内容操作
从模版中选择内容插入
辅助信息管理
技术细节
JVM
标准参数 -
查询清单:java -help
说明:所有的JVM实现都必须实现这些参数的功能,而且向后兼容
-verbose:class
作用:
样例:
-verbose:gc
-verbose:jni
-d32
-d64
-client
-server
-cp
-classpath
-ea
-esa
-da
-dsa
-agentlib
-agentjava
-agentpath
-splash
非标准参数 -X
查询清单:java -X
说明:默认JVM实现这些参数的功能,但是并不保证所有JVM实现都满足,且不保证向后兼容
-Xmixed
-Xint
-Xbootclasspath
-Xbootclasspath/a
-Xbootclasspath/p
-Xdiag
-Xnoclassgc
-Xincgc
-Xloggc:<file>
-Xbatch
-Xms
子主题
-Xmx
-Xss
-Xprof
-Xfuture
-Xrs
-Xcheck:jni
-Xshare:off
-Xshare:auto
-Xshare:on
-XshowSettings
-XshowSettings:all
-XshowSettings:vm
-XshowSettings:properties
-XshowSettings:locale
非Stable参数 -XX
说明:用-XX作为前缀的参数列表在JVM中可能是不健壮的,SUN也不推荐使用,后续可能会在没有通知的情况下就直接取消了
通用说明
获取JVM参数
MangementFactory.getRuntimeMXBean().getInputArguments()
参数约定
布尔型:-XX:+ 打开,-XX:- 关闭。(比如-XX:+PrintGCDetails)
数值型:通过-XX:=设定。数字可以是m/M(兆字节),k/K(千字节),g/G(G字节)。比如:32K表示32768字节
字符型:通过-XX:=设定。通常用来指定一个文件、路径,或者一个命令列表。(比如-XX:HeapDumpPath=./java_pid.hprof)
JAVA
ServiceLoader.load
用来动态加载实现类
具体实现类放在META-INF/services/文件夹中,接口类全路径的文件中
Arthas
安装&启动
1、下载介质:https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.7.2/arthas-packaging-3.7.2-bin.zip
2、解压
3、cd到解压目录,执行:java -jar arthas-boot.jar
4、控制台列出java进程的启动类和进程号,按需输入顺序号,回车开始使用arthas
使用命令
dashboard
作用:输出jvm的基础信息,包括线程清单、内存使用清单、环境变量
样例:
子主题
thread
作用:输出详细jvm中的线程清单
watch
日志专题
PLG(轻量框架)
Promtail(收集)、Loki(存储)、Grafana(展现)
http://www.taodudu.cc/news/show-2720694.html?action=onClick
Loki
下载地址
https://github.com/grafana/loki/releases
启动命令
I:\devtools\PLG\loki> .\loki-windows-amd64.exe --config.file=config/loki-config.yaml
Promtail
下载地址
https://github.com/grafana/loki/releases
启动命令
I:\devtools\PLG\loki> .\promtail-windows-amd64.exe --config.file=config/promtail-local-config.yaml
配置说明
https://blog.csdn.net/JineD/article/details/127092849
Grafana
下载地址
https://grafana.com/grafana/download?platform=windows
启动命令
I:\devtools\PLG\grafana-10.1.1\bin> ./grafana-server.exe
官方文档
https://grafana.com/docs/grafana/latest/
配置示例
https://blog.csdn.net/gzt19881123/article/details/126904724
Go正则表达式
https://blog.csdn.net/weixin_44226181/article/details/125924743
ELK(热门框架)
Logstash(收集)、ElasticSearch(存储)、Kibana(展现)
https://blog.csdn.net/qq_43141726/article/details/114583115
Alog
逻辑编排
LiteFlow
官网:https://liteflow.cc/
组件类型
行为组件
普通组件:NodeComponent
返回:void
EL表达式
THEN(a,b,c)
串行执行a,b,c
WHEN(a,b,c)
并行执行a,b,c
判断组件
条件组件:NodeIfComponent
返回:boolean
要不要执行
EL表达式
IF(x,a,b)
x返回true执行a,返回false执行b
IF(x,a).ELSE(b)
x返回true执行a,返回false执行b
IF(x,a).ELIF(y,b).ELSE(c)
x返回true执行a,y返回true执行b,否则执行c
选择组件:NodeSwitchComponent
返回:String
1、返回节点名称
2、返回别名
3、返回标签(格式:tag:a)
EL表达式
SWITCH(a).TO(b,c)
a返回b执行b,返回c执行c
SWITCH(a).TO(b,c.id("w1"))
a返回w1执行c,返回b执行b
SWITCH(a).TO(b.tag("tb"),c.tag("tc"))
a返回tag:tc执行c,返回tag:tb执行b
循环组件
次数循环组件:NodeForComponent
返回:int
循环执行次数(循环体中获取当前执行下标:this.getLoopIndex())
EL表达式
FOR(f).DO(THEN(a, b))
f中返回执行次数,执行THEN(a,b)
条件循环组件:NodeWhileComponent
返回:boolean
是否继续执行(循环体中获取当前执行下标:this.getLoopIndex())
EL表达式
WHILE(w).DO(THEN(a, b))
w中返回是否继续执行,执行THEN(a,b)
迭代循环组件:NodeIteratorComponent
返回:Iterator<?>
迭代器(循环体中获取当前执行对象获取:this.getCurrLoopObj())
EL表达式
ITERATOR(x).DO(THEN(a, b))
x中返回迭代器,然后迭代执行THEN(a,b)
退出循环组件:NodeBreakComponent
返回:boolean
是否终止循环
EL表达式
WHILE(w).DO(THEN(a, b)).BREAK(c)
每次正常执行前面循环之后,执行c,如果返回true,终止循环
编排诉求
能进行各种逻辑编排
产品开放平台
扩展思路
1、单独做一个各种语言、逻辑的执行器
ZsmartLiteFlowExecutor
2、每种LiteFlow组件做一个实现类,最终执行到执行器中
3、执行器的执行结果必须是LiteFlow所需要的类型
Gradle
总体说明
Gradle对标Maven,用来做java项目编译打包,能通过groovy和java语言进行扩展,默认通过groovy
每个Project(或称模块)都会有一个build.gradle,该文件是项目build的入口,可配置版本、插件、依赖库等信息(类似Maven的pom.xml文件)
build文件对应一个Project对象实例,在build文件中配置的信息,就是给这个project对象实例设置属性
一般会在根模块的build文件中为各子模块设置统一配置,比如应用的插件、依赖的maven仓库
官方文档:https://docs.gradle.org/current/userguide/getting_started_eng.html
build.gradle
configuration
用来定义依赖组
默认组(java plugin下)
子主题
自定义组
设置组与组之间的继承关系
样例
configurations { customDepGrp implementation.extendsFrom customDepGrp }
1、定义一个自定义组:customDepGrp
2、在dependencies中设置自定义组包含的包,这样编译运行就会依赖这些包了
子主题
gradlew