API管理:smart-doc 与 新版 torna 集成

news2025/1/11 16:44:22

使用 docker-compose 搭建 torna 环境
torna 介绍


项目地址:https://gitee.com/durcframework/torna

torna 是一个企业接口文档解决方案,目标是让文档管理变得更加方便、快捷。Torna采用团队协作的方式管理和维护项目API文档,将不同形式的文档纳入进来,形成一个统一的维护方式。Torna弥补了传统文档生成工具(如swagger)的不如之处,在保持原有功能的前提下丰富并增强了一些实用的功能。

smart-doc 介绍


smart-doc 是一个彻底无侵入的 java Rest Api 文档生成工具。让用户的代码保持整洁一直是 smart-doc 的核心理念。使用过 swagger 的人就知道,为了生成文档,一个接口上要写上许许多多的注解,不仅繁杂,而且侵入式程度很高,对 swagger 有很强的依赖,而 smart-doc 则是要简洁许多,不需要写注解,不想用了,去掉依赖即可,非常方便。

准备工作
准备环境
准备一台 linux 虚拟机,安装 docker 环境以及 docker-compose,也使用 windows 电脑上的 wsl 环境,去 docker 的官网安装 win 版 docker,本文使用的环境为 win 版docker。

拉取项目
项目地址:

https://gitee.com/durcframework/torna/tree/master/torna-docker-compose

git地址:

https://gitee.com/durcframework/torna.git

使用 git 拉取项目之后的文件目录如下:

配置文件内容介绍
docker-compose.yml

总共是编排了两个容器,一个是 mysql,一个是 torna ,与源文件相比,我开放了 3306 端口,并且设置了 mysql 的数据目录挂载。

version:"3"
services:
  mysql:
    build:
      context:./
      dockerfile:Dockerfile
    container_name:mysql
    ports:
     -3306:3306#开放外部连接端口,若是本机也安装了 mysql,注意端口冲突问题
    environment:
      TZ:Asia/Shanghai
      MYSQL_ROOT_PASSWORD:123456# 可以自定义密码,但是不要忘了修改 application.properties 中的数据库连接
      MYSQL_ROOT_HOST:'%'
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --lower_case_table_names=1
    volumes:
      -./my.cnf:/etc/my.cnf
      -./data:/var/lib/mysql# 设置 mysql 数据外部挂载目录
    networks:
      -torna-net
    restart:always
  torna:
    image:tanghc2020/torna:latest
    container_name:torna
    ports:
      -7700:7700
    depends_on:
      -mysql
    # 建立连接
    links:
      -mysql
    volumes:
      -./application.properties:/torna/config/application.properties# 挂载项目的配置文件
    environment:
      -TZ=Asia/Shanghai
      -JAVA_OPTS=-server-Xmx512m-Xms512m-Djava.awt.headless=true
    networks:
      -torna-net
    restart:always
networks:
  torna-net:

Dockerfile

FROM mysql:5.7
#定义会被容器自动执行的目录
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
#定义初始化sql文件
ENV INIT_SQL mysql.sql
#把要执行的sql文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个sql
COPY $INIT_SQL $AUTO_RUN_DIR
#给执行文件增加可执行权限
RUN chmod a+x $AUTO_RUN_DIR/$INIT_SQL

application.properties

# 项目的端口
server.port=7700
 
# 数据库连接信息,因为 torna 使用 links 命令连接了 mysql 容器,所以可以使用 mysql 容器名代替 ip 地址
mysql.host=mysql:3306
mysql.schema=torna
mysql.username=root
mysql.password=123456

my.cnf

mysql 的一些常规配置

[mysqld]
user=mysql
default-storage-engine=INNODB
#character-set-server=utf8
character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
[client]
#utf8mb4字符集可以存储emoji表情字符
#default-character-set=utf8
default-character-set=utf8mb4
[mysql]
#default-character-set=utf8
default-character-set=utf8mb4

torna 项目的建库建表 sql,这里不做赘述。

构建项目
拉取所需镜像
mysql

docker pull mysql:5.7


torna

# 获取最新的 torna
docker pull tanghc2020/torna


编排容器
在 docker-compose.yml 文件的路径下执行:

# 编排容器
docker-compose up -d
 
# 查看编排容器运行情况
docker-compose ps


可以看到两个项目都已成功运行。

可能遇到的问题
若是有容器一直处于 restart 的状态或是访问 torna 页面失败,则可以使用命令:

docker logs -f mysql 
# 或者
docker logs -f torna
# 查看具体的问题


我遇到的问题是,docker-compose up -d 命令编排之后,mysql 容器并未自动执行 mysql.sql 建表 sql,导致 torna 启动失败,错误为 mysql 中没有找到 torna 数据库。

我随即使用数据库连接工具连接 mysql,手动建立 torna 数据库,并执行 mysql.sql 文件。再使用 docker restart torna 重启 torna 容器。

访问 torna
部署在本机的话,在浏览器输入:127.0.0.1:7700 ,即可访问项目,初始账户为: admin@torna.cn 密码为:123456

登录之后:

创建空间之后,再创建项目,在项目中新建模块

点击新建模块,再点击 OpenAPI,token 是推送接口文档的关键

smart-doc 与 springboot 结合


maven 引入依赖
仔细阅读每个配置项的注释,然后根据自己项目情况去配置

<plugin>
    <groupId>com.github.shalousun</groupId>
    <artifactId>smart-doc-maven-plugin</artifactId>
    <version>[最新版本]</version>
    <configuration>
        <!--指定生成文档的使用的配置文件,配置文件放在自己的项目中-->
        <configFile>./src/main/resources/smart-doc.json</configFile>
        <!--指定项目名称-->
        <projectName>测试</projectName>
        <!--smart-doc实现自动分析依赖树加载第三方依赖的源码,如果一些框架依赖库加载不到导致报错,这时请使用excludes排除掉-->
        <excludes>
            <!--格式为:groupId:artifactId;参考如下-->
            <!--也可以支持正则式如:com.alibaba:.* -->
            <exclude>com.alibaba:fastjson</exclude>
        </excludes>
        <!--includes配置用于配置加载外部依赖源码,配置后插件会按照配置项加载外部源代码而不是自动加载所有,因此使用时需要注意-->
        <!--smart-doc能自动分析依赖树加载所有依赖源码,原则上会影响文档构建效率,因此你可以使用includes来让插件加载你配置的组件-->
        <includes>
            <!--格式为:groupId:artifactId;参考如下-->
            <!--也可以支持正则式如:com.alibaba:.* -->
            <include>com.alibaba:fastjson</include>
        </includes>
    </configuration>
    <executions>
        <execution>
            <!--如果不需要在执行编译时启动smart-doc,则将phase注释掉-->
            <phase>compile</phase>
            <goals>
                <!--smart-doc提供了html、openapi、markdown等goal,可按需配置-->
                <goal>html</goal>
            </goals>
        </execution>
    </executions>
</plugin>
smart-doc.json

在 resource 目录下新建 smart-doc.json 文件,具体的配置请访问:https://smart-doc-group.github.io/#/zh-cn/diy/config

我的配置如下:

{
  "serverUrl": "http://127.0.0.1:3333/workflow",
  "isStrict": false,
  "allInOne": true,
  "outPath": "src/main/resources/static/doc",
  "coverOld": true,
  "createDebugPage": true,
  "style": "xt256",
  "packageFilters": "com.product6.controller.*",
  "appToken": "08a91f662cae459a91238fafaa6e371c", // 注意 appToken 为 OpenAPI 中的 token
  "openUrl": "http://127.0.0.1:7700/api", // openUrl 为 OpenAPI 中的请求路径
  "md5EncryptedHtmlName": true,
  "projectName": "workflow",
  "debugEnvName": "测试环境",
  "replace": true,
  "debugEnvUrl": "http://127.0.0.1",
  "tornaDebug": true,
  "inlineEnum": true,
  "skipTransientField": true,
  "errorCodeDictionaries": [
    {
      "title": "title",
      "enumClassName": "com.product6.result.CommonCode",
      "codeField": "code",
      "descField": "message"
    }
  ]
}
执行推送

使用 smart-doc 插件进行推送

推送完成之后,可以在 torna 上对应的模块看到推送的接口

可能遇到的问题
推送中遇到 Data too long for column 'example' at row 1 ....,定位到是 mysql 中 doc_param 表中 example 字段长度太短,原来为 varchar(1024),我将其修改为 text 类型

总结


依赖于网上的教程,不注意去看官网

网上的教程有一定时效性,像是 torna 新版本只需要 appToken 认证即可,旧的版本则需要 appKey,appToken,secret 三个值,依据网上的教程,我死活找不到 开放用户的选项,也就无法获取 appKey,``appToken,secret` 这三个值,最后求助于官方群,也感谢作者的耐心解答。

一般官网上的教程都是最新的,优先去查阅官网。

mvn 打包的问题

使用的项目是一个 maven 多模块的项目,当打包一个模块总是出现 找不到符号 这个问题,我将其依赖项执行了 install 命令,再次打包依旧是这个问题,不管我怎么清缓存,或者是去本地仓库删除依赖,又或者是更新 maven 的版本,这个问题始终存在,最终在网上找到了一个帖子,执行了 mvn idea:idea,莫名奇妙的编译完成了,只能用神奇来说明新版的 maven 感觉编译速度有所加快。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1274881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【UGUI】为Button 组件添加回调函数-也就是按钮控制一些行为

【UGUI】为Button 组件添加回调函数-也就是按钮控制一些行为 第一种&#xff1a;添加侦听事件-拿到Button-代码关联一个函数 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro;public class UIcontrol : …

Windows系统下使用PHPCS+PHPMD+GIT钩子

前言 使用PHPCSGIT钩子保障团队开发中代码风格一致性实践 使用PHPMD提高代码质量与可读性 0.介绍 PHP_CodeSniffer php代码嗅探器 包含phpcs(php code standard 代码标准) phpcbf(php code beautify fix 代码美化修复) 是一个代码风格检测工具,着重代码规范 它包含两类脚本…

全网最新最全面的Jmeter接口测试:jmeter设置HTTP信息头管理器模拟请求头

HTTP信息头管理器 HTTP信息头管理器是在有需要模拟请求头部的时候进行设置的&#xff0c;添加方式 是 右击线程组 -- 配置元件 -- HTTP信息头管理器 可以通过抓包工具或者F12获取http请求的header头部信息&#xff1b;如下图&#xff1a; 复制并点击jmeter中的从剪贴板添加&am…

kobs-ng 烧写nand中的uboot

如何获取kobs-ng 我是使用buildroot自动编译的imx-kobs&#xff0c;生成了kobs-ng可执行文件。 使用 kobs-ng 烧写 u-boot 1. flash_erase /dev/mtd0 0 0 //擦除uboot所在分区 2. 挂载 debugfs mount -t debugfs debugfs /sys/kernel/debug 如果不挂载为报以下错误&#x…

101.套接字-Socket网络编程3

目录 1.字节序 主机字节序&#xff08;小端&#xff09; 网络字节序&#xff08;大端&#xff09; 字节序转换函数 2.IP地址转换函数 3.套接字地址结构 通用 socket 地址结构 专用 socket 地址结构 Socket套接字的目的是将TCP/IP协议相关软件移植到UNIX类系统中。设计…

2023-12-01 AndroidR 系统在root目录下新建文件夹和创建链接,编译的时候需要修改sepolicy权限

一、想在android 系统的根目录下新建一个tmp 文件夹&#xff0c;建立一个链接usr链接到data目录。 二、在system/core/rootdir/Android.mk里面的LOCAL_POST_INSTALL_CMD 增加 dev proc sys system data data_mirror odm oem acct config storage mnt apex debug_ramdisk tmp …

中职组网络安全-web-PYsystem003.img-(环境+解析)

​ web安全渗透 1.通过URL访问http://靶机IP/1&#xff0c;对该页面进行渗透测试&#xff0c;将完成后返回的结果内容作为flag值提交&#xff1b; 访问该网页后发现F12被禁用&#xff0c;使用ctrlshifti查看 ctrlshifti 等效于 F12 flag{fc35fdc70d5fc69d269883a822c7a53e}…

[读论文]meshGPT

概述 任务&#xff1a;无条件生成mesh &#xff08;无颜色&#xff09;数据集&#xff1a;shapenet v2方法&#xff1a;先trian一个auto encoder&#xff0c;用来获得code book&#xff1b;然后trian一个自回归的transformermesh表达&#xff1a;face序列。face按规定的顺序&a…

贝斯手-MISC-bugku-解题步骤

——CTF解题专栏—— 题目信息&#xff1a; 题目&#xff1a;贝斯手 作者&#xff1a;Tokeii 提示&#xff1a;无 解题附件&#xff1a; 解题思路&信息收集&#xff1a; 详细信息看了&#xff0c;没有藏料&#xff0c;这次上来就是一个命好名的压缩包浅浅打开一下&…

Discuz论坛自动采集发布软件

随着网络时代的不断发展&#xff0c;Discuz论坛作为一个具有广泛用户基础的开源论坛系统&#xff0c;其采集全网文章的技术也日益受到关注。在这篇文章中&#xff0c;我们将专心分享通过输入关键词实现Discuz论坛的全网文章采集&#xff0c;同时探讨采集过程中伪原创的发布方法…

【Linux--进程控制】

目录 一、进程等待1.1进程等待方法1.2获取子进程status 二、进程替换2.1单进程版本--最简单得程序替换2.2 进程替换得原理2.3 多进程版本--验证各种程序替换接口2.4 总结 一、进程等待 1.1进程等待方法 问题1&#xff1a;进程等待是什么&#xff1f; 通过系统调用wait/waitpi…

uniapp uview u-input在app(运行在安卓基座上)上不能动态控制type类型(显隐密码)

开发密码显隐功能时&#xff0c;在浏览器h5上功能是没问题的 <view class"login-item-input"><u-input:type"showPassWord ? password : text"style"background: #ecf0f8"placeholder"请输入密码"border"surround&quo…

Echarts大屏可视化_06 饼状图的引入和定制开发

继续跟着b站pink老师学习 Echarts的开发 饼状图1 ——年龄分布 1.引入饼状图 ECharts 实例 直接打开网站 就是选好的饼状图的网址 //饼形图1 模块制作 (function () {// 实例化对象var myChart echarts.init(document.querySelector(".pie .chart"));// 指定配置…

2分图匹配算法

定义 节点u直接无边&#xff0c;v之间无边&#xff0c;边只存在uv之间。判断方法&#xff1a;BFS染色法&#xff0c;全部染色后&#xff0c;相邻边不同色 无权二部图中的最大匹配 最大匹配即每一个都匹配上min&#xff08;u&#xff0c; v&#xff09;。贪心算法可能导致&…

IELTS考试详细介绍

一、INTRODUCTION 雅思考试&#xff08;IELTS&#xff09;&#xff0c;全称为国际英语测试系统&#xff08;International English Language Testing System&#xff09;&#xff0c;是著名的国际性英语标准化水平测试之一。 雅思考试于1989年设立&#xff0c;由英国文化教育…

【端到端可微1】端到端的训练,使用反向传播,要求过程可微分

文章目录 背景想法&#xff1a; Weighted least-squares fitting方法&#xff1a; Backpropagating through the fitting procedure.温习之前的基础前向传播反向传播 总结 背景 想做一个端到端训练的模型&#xff0c;将最小二乘嵌入其中。因此有了这系列文章。 想法&#xff…

12月1日作业

代码整理&#xff0c;将学过的三种运算符重载&#xff0c;每个至少实现一个运算符的重载 #include <iostream>using namespace std;class Cloudy {friend bool operator!(const Cloudy &L,const Cloudy &R); private:int a; public:int b; public:Cloudy(){}Clo…

Facebook公共主页受限、被封?一文教你排雷解决

一、Facebook公共主页是什么&#xff1f; 现在人们的生活已经离不开各种社交媒体&#xff0c;只要有智能手机&#xff0c;或多或少会使用一些社交平台&#xff0c;而Facebook是一个拥有大量用户的社交平台。这对于各种企业而言&#xff0c;也是一个十分优秀的营销平台&#xf…

Conductor之动态分叉

Conductor之动态分叉 动态分叉 关于动态分叉&#xff0c;参考1 动态分叉 有时候我们希望在运行时能动态添加分叉任务&#xff08;注意是分叉任务&#xff0c;不是动态任务&#xff09;&#xff0c;Conductor当前版本也是支持的&#xff0c;但是经过试验的版本只支持串行分叉&…

【idea】设置鼠标滚轮控制缩放大小

1、点击file 选择Setting 2、点击Editor 下面的 General 3、勾选 Mouse Control 下面的 Change font size with CtrlMouse Wheel in 4、点级apply 5、按 ctrl键 鼠标滚轮缩放字体的大小