如何通过代码设置SchemaCrawler的command参数及全配置示例?
完整SchemaCrawler程序化配置示例
下面是覆盖常见命令行参数的完整代码实现,包含你提到的command参数配置、LimitOption/LoadOptions设置,以及DiagramOptionsBuilder的--portable=names和Graphviz属性配置:
import schemacrawler.schema.SchemaCrawlerOptions; import schemacrawler.schema.TableTypes; import schemacrawler.tools.diagram.DiagramOptions; import schemacrawler.tools.diagram.DiagramOptionsBuilder; import schemacrawler.tools.executable.SchemaCrawlerCommand; import schemacrawler.tools.options.LimitOptions; import schemacrawler.tools.options.LimitOptionsBuilder; import schemacrawler.tools.options.LoadOptions; import schemacrawler.tools.options.LoadOptionsBuilder; import schemacrawler.tools.options.OutputOptions; import schemacrawler.tools.options.OutputOptionsBuilder; import schemacrawler.tools.utility.SchemaCrawlerUtility; import java.sql.Connection; import java.sql.DriverManager; import java.nio.file.Paths; import java.util.Collections; public class SchemaCrawlerFullConfigExample { public static void main(String[] args) throws Exception { // 替换为你的数据库连接信息 final String dbUrl = "jdbc:postgresql://localhost:5432/your_db"; final String dbUser = "your_username"; final String dbPassword = "your_password"; try (Connection connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword)) { // 1. 配置LimitOptions(对应命令行--schema、--tables、--table-types等参数) final LimitOptions limitOptions = LimitOptionsBuilder.builder() .includeSchemas("public") // 对应--schema=public .tableTypes(Collections.singletonList(TableTypes.TABLE)) // 对应--table-types=TABLE .includeTables("employees|departments") // 对应--tables=employees|departments .build(); // 2. 配置LoadOptions(对应命令行--load-columns、--load-foreign-keys等参数) final LoadOptions loadOptions = LoadOptionsBuilder.builder() .loadColumns(true) .loadIndexes(true) .loadPrimaryKeys(true) .loadForeignKeys(true) .build(); // 3. 配置核心SchemaCrawlerOptions,设置command参数 final SchemaCrawlerOptions schemaCrawlerOptions = SchemaCrawlerOptions.builder() .limitOptions(limitOptions) .loadOptions(loadOptions) // 对应命令行的顶级命令,可选值:DIAGRAM/SCHEMA/DATA等 .command(SchemaCrawlerCommand.DIAGRAM) .build(); // 4. 配置DiagramOptions(对应命令行--portable、--graphviz-*等参数) final DiagramOptions diagramOptions = DiagramOptionsBuilder.builder() .portableNames() // 对应--portable=names .graphvizFormat(DiagramOptions.GraphvizFormat.png) // 对应--output-format=png .graphvizProperty("graph.fontname", "Arial") // 对应--graphviz-property=graph.fontname=Arial .graphvizProperty("node.fontname", "Arial") .graphvizProperty("edge.fontname", "Arial") .showColumnNames(true) // 对应--show-column-names .showPrimaryKeys(true) // 对应--show-primary-keys .showForeignKeys(true) // 对应--show-foreign-keys .build(); // 5. 配置输出选项(对应命令行--output-file参数) final OutputOptions outputOptions = OutputOptionsBuilder.builder() .outputFormat(diagramOptions.getGraphvizFormat().getFormat()) .outputFile(Paths.get("database-diagram.png")) .build(); // 6. 执行SchemaCrawler命令 SchemaCrawlerUtility.execute(connection, schemaCrawlerOptions, diagramOptions, outputOptions); } } }
关键参数对应说明
- Command参数:通过
SchemaCrawlerOptions.builder().command(SchemaCrawlerCommand.XXX)设置,枚举值直接对应命令行的顶级命令:SchemaCrawlerCommand.DIAGRAM→ 命令行diagram命令(生成数据库图)SchemaCrawlerCommand.SCHEMA→ 命令行schema命令(生成文本格式Schema信息)SchemaCrawlerCommand.DATA→ 命令行data命令(导出表数据)
- Portable命名:
DiagramOptionsBuilder.portableNames()直接等价于--portable=names参数,生成跨数据库兼容的对象名称 - 过滤与加载配置:
LimitOptionsBuilder和LoadOptionsBuilder的方法一一对应命令行的--limit、--load-*等参数 - Graphviz属性:
graphvizProperty方法直接对应--graphviz-property参数,可自定义图的字体、布局等细节
依赖说明(Maven)
确保项目包含SchemaCrawler核心及对应数据库驱动依赖(以PostgreSQL为例):
<dependency> <groupId>us.fatehi</groupId> <artifactId>schemacrawler</artifactId> <version>16.21.1</version> <!-- 使用最新稳定版本 --> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.6.0</version> </dependency>
内容的提问来源于stack exchange,提问作者SilverPhoenix
相关产品推荐
相关产品推荐

