# db-compare **Repository Path**: JustinYi922/db-compare ## Basic Information - **Project Name**: db-compare - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-27 - **Last Updated**: 2025-11-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PostgreSQL数据库对比工具 这是一个基于Spring Boot的PostgreSQL数据库对比工具,用于对比两个PostgreSQL数据库的表信息和字段信息。 ## 功能特性 1. **表信息对比** - 对比两个数据库中表的名称 - 检查表是否存在 - 对比表的备注信息 - 对比表的编码信息 2. **字段信息对比** - 对比所有表的字段信息差异 - 包括字段名称、类型、备注、是否必填、是否有默认值等 - 只输出有差异的字段信息 3. **Excel导出** - 自动生成两个Excel文件 - 第一个Excel:表信息对比结果 - 第二个Excel:字段信息对比结果(仅包含有差异的字段) ## 环境要求 - JDK 17 或更高版本 - Maven 3.6 或更高版本 - PostgreSQL数据库 ## 配置说明 ### 1. 配置文件 编辑 `src/main/resources/application.yml` 文件,配置两个数据库的连接信息: ```yaml spring: application: name: db-compare # 数据库A配置 database: a: host: localhost port: 5432 database: database_a username: postgres password: postgres schema: public # 数据库B配置 b: host: localhost port: 5432 database: database_b username: postgres password: postgres schema: public # 输出配置 output: directory: output ``` ### 2. 配置参数说明 - `database.a` / `database.b`: 两个数据库的连接配置 - `host`: 数据库主机地址 - `port`: 数据库端口(默认5432) - `database`: 数据库名称 - `username`: 用户名 - `password`: 密码 - `schema`: Schema名称(默认public) - `output.directory`: Excel文件输出目录(默认output) ## 编译和运行 ### 1. 编译项目 ```bash mvn clean compile ``` ### 2. 打包项目 ```bash mvn clean package ``` 打包后会生成可执行的jar文件: - `target/db-compare-1.0.0.jar` - Spring Boot可执行jar(推荐使用) ### 3. 运行程序 ```bash java -jar target/db-compare-1.0.0.jar ``` 或者使用Maven运行: ```bash mvn spring-boot:run ``` 程序启动后会在 `http://localhost:8080` 监听请求。 ## API接口 ### 1. 执行数据库对比 **接口地址:** `GET /api/db-compare/execute` **功能:** 执行完整的数据库对比任务 **响应示例:** ```json { "success": true, "message": "数据库对比完成", "tableCount": 10, "columnDiffCount": 5, "tableExcelPath": "output/表信息对比_20231127_102315.xlsx", "columnExcelPath": "output/字段信息对比_20231127_102315.xlsx", "totalTime": "1234ms" } ``` ### 2. 测试数据库连接 **接口地址:** `GET /api/db-compare/test-connection` **功能:** 测试两个数据库的连接是否正常 **响应示例:** ```json { "success": true, "message": "数据库连接测试成功" } ``` ## 使用说明 1. **配置数据库连接信息** - 编辑 `src/main/resources/application.yml` 文件 - 填写两个数据库的连接信息 2. **启动程序** - 运行程序后,Spring Boot应用会在8080端口启动 3. **调用API接口** - 使用浏览器或Postman访问 `http://localhost:8080/api/db-compare/execute` 执行对比 - 或访问 `http://localhost:8080/api/db-compare/test-connection` 测试连接 4. **查看结果** - 生成的Excel文件会保存在配置的 `output.directory` 目录下(默认 `output`) - 文件名包含时间戳,例如:`表信息对比_20231127_102315.xlsx` 5. **查看日志** - 控制台会实时输出日志信息 - 所有日志会保存到 `logs/db-compare.log` 文件 - 错误日志会单独保存到 `logs/db-compare-error.log` 文件 ## 项目结构 ``` db-compare/ ├── pom.xml # Maven配置文件 ├── README.md # 项目说明文档 └── src/ └── main/ ├── resources/ │ └── application.yml # Spring Boot配置文件 └── java/ └── com/ └── wensheng/ └── dbcompare/ ├── Main.java # Spring Boot启动类 ├── config/ │ ├── DatabaseConfig.java # 数据库配置类 │ ├── DatabaseProperties.java # 配置属性类 │ └── DatabaseConfigConverter.java # 配置转换器 ├── model/ │ ├── TableInfo.java # 表信息模型 │ └── ColumnInfo.java # 字段信息模型 ├── runner/ │ └── DatabaseCompareRunner.java # 对比任务执行器 ├── service/ │ ├── TableCompareService.java # 表对比服务 │ └── ColumnCompareService.java # 字段对比服务 └── util/ ├── DatabaseConnection.java # 数据库连接工具 └── ExcelExporter.java # Excel导出工具 ``` ## 依赖说明 - **Spring Boot** (3.2.0) - 应用框架 - **PostgreSQL JDBC驱动** - 用于连接PostgreSQL数据库(由Spring Boot管理版本) - **Apache POI** (5.2.5) - 用于生成Excel文件 - **Lombok** - 简化Java代码(由Spring Boot管理版本) ## 日志说明 项目使用Logback进行日志管理,日志配置在 `src/main/resources/logback-spring.xml` 中: - **控制台输出:** 实时显示所有日志 - **文件输出:** 所有日志保存到 `logs/db-compare.log` - **错误日志:** 错误日志单独保存到 `logs/db-compare-error.log` - **日志级别:** - 项目包:INFO级别 - SQL相关:DEBUG级别 - Spring框架:INFO级别 日志会记录: - 数据库连接过程 - SQL查询执行情况 - 表信息和字段信息的获取过程 - 对比分析的详细步骤 - Excel导出过程 - 所有错误和异常信息(包含完整堆栈) ## 注意事项 1. 确保两个数据库都可以正常连接 2. 确保有足够的权限访问information_schema和pg_catalog 3. 生成的Excel文件会保存在配置的`output.directory`目录中(默认`output`) 4. 字段对比结果只包含有差异的字段,相同的字段不会显示 5. 配置文件中的密码建议使用环境变量或配置中心管理,避免明文存储 6. 可以通过Spring Profile来管理不同环境的配置 7. 如果数据库处于恢复模式(recovery mode),程序会记录详细错误信息并返回友好的错误提示 8. 日志文件会自动按日期和大小滚动,避免日志文件过大