Commit ff5276998cb956fc0878bf39a194040378ce7363
1 parent
5d58037d
【移除】数据库文档,简化项目的复杂度
Showing
3 changed files
with
0 additions
and
175 deletions
yudao-dependencies/pom.xml
| ... | ... | @@ -476,22 +476,6 @@ |
| 476 | 476 | </dependency> |
| 477 | 477 | |
| 478 | 478 | <dependency> |
| 479 | - <groupId>cn.smallbun.screw</groupId> | |
| 480 | - <artifactId>screw-core</artifactId> <!-- 实现数据库文档 --> | |
| 481 | - <version>${screw.version}</version> | |
| 482 | - <exclusions> | |
| 483 | - <exclusion> | |
| 484 | - <groupId>org.freemarker</groupId> | |
| 485 | - <artifactId>freemarker</artifactId> <!-- 移除 Freemarker 依赖,采用 Velocity 作为模板引擎 --> | |
| 486 | - </exclusion> | |
| 487 | - <exclusion> | |
| 488 | - <groupId>com.alibaba</groupId> | |
| 489 | - <artifactId>fastjson</artifactId> <!-- 最新版screw-core1.0.5依赖fastjson1.2.73存在漏洞,移除。 --> | |
| 490 | - </exclusion> | |
| 491 | - </exclusions> | |
| 492 | - </dependency> | |
| 493 | - | |
| 494 | - <dependency> | |
| 495 | 479 | <groupId>com.google.guava</groupId> |
| 496 | 480 | <artifactId>guava</artifactId> |
| 497 | 481 | <version>${guava.version}</version> | ... | ... |
yudao-module-infra/yudao-module-infra-biz/pom.xml
| ... | ... | @@ -95,11 +95,6 @@ |
| 95 | 95 | <artifactId>velocity-engine-core</artifactId> <!-- 实现代码生成 --> |
| 96 | 96 | </dependency> |
| 97 | 97 | |
| 98 | - <dependency> | |
| 99 | - <groupId>cn.smallbun.screw</groupId> | |
| 100 | - <artifactId>screw-core</artifactId> <!-- 实现数据库文档 --> | |
| 101 | - </dependency> | |
| 102 | - | |
| 103 | 98 | <!-- 监控相关 --> |
| 104 | 99 | <dependency> |
| 105 | 100 | <groupId>cn.iocoder.boot</groupId> | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/db/DatabaseDocController.java deleted
| 1 | -package cn.iocoder.yudao.module.infra.controller.admin.db; | |
| 2 | - | |
| 3 | -import cn.hutool.core.io.FileUtil; | |
| 4 | -import cn.hutool.core.util.IdUtil; | |
| 5 | -import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; | |
| 6 | -import cn.smallbun.screw.core.Configuration; | |
| 7 | -import cn.smallbun.screw.core.engine.EngineConfig; | |
| 8 | -import cn.smallbun.screw.core.engine.EngineFileType; | |
| 9 | -import cn.smallbun.screw.core.engine.EngineTemplateType; | |
| 10 | -import cn.smallbun.screw.core.execute.DocumentationExecute; | |
| 11 | -import cn.smallbun.screw.core.process.ProcessConfig; | |
| 12 | -import com.baomidou.dynamic.datasource.creator.DataSourceProperty; | |
| 13 | -import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; | |
| 14 | -import com.zaxxer.hikari.HikariConfig; | |
| 15 | -import com.zaxxer.hikari.HikariDataSource; | |
| 16 | -import io.swagger.v3.oas.annotations.tags.Tag; | |
| 17 | -import io.swagger.v3.oas.annotations.Parameter; | |
| 18 | -import io.swagger.v3.oas.annotations.Operation; | |
| 19 | -import org.springframework.web.bind.annotation.GetMapping; | |
| 20 | -import org.springframework.web.bind.annotation.RequestMapping; | |
| 21 | -import org.springframework.web.bind.annotation.RequestParam; | |
| 22 | -import org.springframework.web.bind.annotation.RestController; | |
| 23 | - | |
| 24 | -import jakarta.annotation.Resource; | |
| 25 | -import jakarta.servlet.http.HttpServletResponse; | |
| 26 | -import java.io.File; | |
| 27 | -import java.io.IOException; | |
| 28 | -import java.util.Arrays; | |
| 29 | - | |
| 30 | -@Tag(name = "管理后台 - 数据库文档") | |
| 31 | -@RestController | |
| 32 | -@RequestMapping("/infra/db-doc") | |
| 33 | -public class DatabaseDocController { | |
| 34 | - | |
| 35 | - @Resource | |
| 36 | - private DynamicDataSourceProperties dynamicDataSourceProperties; | |
| 37 | - | |
| 38 | - private static final String FILE_OUTPUT_DIR = System.getProperty("java.io.tmpdir") + File.separator | |
| 39 | - + "db-doc"; | |
| 40 | - private static final String DOC_FILE_NAME = "数据库文档"; | |
| 41 | - private static final String DOC_VERSION = "1.0.0"; | |
| 42 | - private static final String DOC_DESCRIPTION = "文档描述"; | |
| 43 | - | |
| 44 | - @GetMapping("/export-html") | |
| 45 | - @Operation(summary = "导出 html 格式的数据文档") | |
| 46 | - @Parameter(name = "deleteFile", description = "是否删除在服务器本地生成的数据库文档", example = "true") | |
| 47 | - public void exportHtml(@RequestParam(defaultValue = "true") Boolean deleteFile, | |
| 48 | - HttpServletResponse response) throws IOException { | |
| 49 | - doExportFile(EngineFileType.HTML, deleteFile, response); | |
| 50 | - } | |
| 51 | - | |
| 52 | - @GetMapping("/export-word") | |
| 53 | - @Operation(summary = "导出 word 格式的数据文档") | |
| 54 | - @Parameter(name = "deleteFile", description = "是否删除在服务器本地生成的数据库文档", example = "true") | |
| 55 | - public void exportWord(@RequestParam(defaultValue = "true") Boolean deleteFile, | |
| 56 | - HttpServletResponse response) throws IOException { | |
| 57 | - doExportFile(EngineFileType.WORD, deleteFile, response); | |
| 58 | - } | |
| 59 | - | |
| 60 | - @GetMapping("/export-markdown") | |
| 61 | - @Operation(summary = "导出 markdown 格式的数据文档") | |
| 62 | - @Parameter(name = "deleteFile", description = "是否删除在服务器本地生成的数据库文档", example = "true") | |
| 63 | - public void exportMarkdown(@RequestParam(defaultValue = "true") Boolean deleteFile, | |
| 64 | - HttpServletResponse response) throws IOException { | |
| 65 | - doExportFile(EngineFileType.MD, deleteFile, response); | |
| 66 | - } | |
| 67 | - | |
| 68 | - private void doExportFile(EngineFileType fileOutputType, Boolean deleteFile, | |
| 69 | - HttpServletResponse response) throws IOException { | |
| 70 | - String docFileName = DOC_FILE_NAME + "_" + IdUtil.fastSimpleUUID(); | |
| 71 | - String filePath = doExportFile(fileOutputType, docFileName); | |
| 72 | - String downloadFileName = DOC_FILE_NAME + fileOutputType.getFileSuffix(); //下载后的文件名 | |
| 73 | - try { | |
| 74 | - // 读取,返回 | |
| 75 | - ServletUtils.writeAttachment(response, downloadFileName, FileUtil.readBytes(filePath)); | |
| 76 | - } finally { | |
| 77 | - handleDeleteFile(deleteFile, filePath); | |
| 78 | - } | |
| 79 | - } | |
| 80 | - | |
| 81 | - /** | |
| 82 | - * 输出文件,返回文件路径 | |
| 83 | - * | |
| 84 | - * @param fileOutputType 文件类型 | |
| 85 | - * @param fileName 文件名, 无需 ".docx" 等文件后缀 | |
| 86 | - * @return 生成的文件所在路径 | |
| 87 | - */ | |
| 88 | - private String doExportFile(EngineFileType fileOutputType, String fileName) { | |
| 89 | - try (HikariDataSource dataSource = buildDataSource()) { | |
| 90 | - // 创建 screw 的配置 | |
| 91 | - Configuration config = Configuration.builder() | |
| 92 | - .version(DOC_VERSION) // 版本 | |
| 93 | - .description(DOC_DESCRIPTION) // 描述 | |
| 94 | - .dataSource(dataSource) // 数据源 | |
| 95 | - .engineConfig(buildEngineConfig(fileOutputType, fileName)) // 引擎配置 | |
| 96 | - .produceConfig(buildProcessConfig()) // 处理配置 | |
| 97 | - .build(); | |
| 98 | - | |
| 99 | - // 执行 screw,生成数据库文档 | |
| 100 | - new DocumentationExecute(config).execute(); | |
| 101 | - | |
| 102 | - return FILE_OUTPUT_DIR + File.separator + fileName + fileOutputType.getFileSuffix(); | |
| 103 | - } | |
| 104 | - } | |
| 105 | - | |
| 106 | - private void handleDeleteFile(Boolean deleteFile, String filePath) { | |
| 107 | - if (!deleteFile) { | |
| 108 | - return; | |
| 109 | - } | |
| 110 | - FileUtil.del(filePath); | |
| 111 | - } | |
| 112 | - | |
| 113 | - /** | |
| 114 | - * 创建数据源 | |
| 115 | - */ | |
| 116 | - // TODO 芋艿:screw 暂时不支持 druid,尴尬 | |
| 117 | - private HikariDataSource buildDataSource() { | |
| 118 | - // 获得 DataSource 数据源,目前只支持首个 | |
| 119 | - String primary = dynamicDataSourceProperties.getPrimary(); | |
| 120 | - DataSourceProperty dataSourceProperty = dynamicDataSourceProperties.getDatasource().get(primary); | |
| 121 | - // 创建 HikariConfig 配置类 | |
| 122 | - HikariConfig hikariConfig = new HikariConfig(); | |
| 123 | - hikariConfig.setJdbcUrl(dataSourceProperty.getUrl()); | |
| 124 | - hikariConfig.setUsername(dataSourceProperty.getUsername()); | |
| 125 | - hikariConfig.setPassword(dataSourceProperty.getPassword()); | |
| 126 | - hikariConfig.addDataSourceProperty("useInformationSchema", "true"); // 设置可以获取 tables remarks 信息 | |
| 127 | - // 创建数据源 | |
| 128 | - return new HikariDataSource(hikariConfig); | |
| 129 | - } | |
| 130 | - | |
| 131 | - /** | |
| 132 | - * 创建 screw 的引擎配置 | |
| 133 | - */ | |
| 134 | - private static EngineConfig buildEngineConfig(EngineFileType fileOutputType, String docFileName) { | |
| 135 | - return EngineConfig.builder() | |
| 136 | - .fileOutputDir(FILE_OUTPUT_DIR) // 生成文件路径 | |
| 137 | - .openOutputDir(false) // 打开目录 | |
| 138 | - .fileType(fileOutputType) // 文件类型 | |
| 139 | - .produceType(EngineTemplateType.velocity) // 文件类型 | |
| 140 | - .fileName(docFileName) // 自定义文件名称 | |
| 141 | - .build(); | |
| 142 | - } | |
| 143 | - | |
| 144 | - /** | |
| 145 | - * 创建 screw 的处理配置,一般可忽略 | |
| 146 | - * 指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置 | |
| 147 | - */ | |
| 148 | - private static ProcessConfig buildProcessConfig() { | |
| 149 | - return ProcessConfig.builder() | |
| 150 | - .ignoreTablePrefix(Arrays.asList("QRTZ_", "ACT_", "FLW_")) // 忽略表前缀 | |
| 151 | - .build(); | |
| 152 | - } | |
| 153 | - | |
| 154 | -} |