切换数据库
ContiNew Admin 默认使用 MySQL 数据库,但从 v2.5.0 版本开始,框架逐步扩展适配更多数据库系统,目前已初步支持 PostgreSQL 数据库。本文将详细介绍如何切换数据库环境,以下操作以切换到 PostgreSQL 为例。
切换步骤
步骤 1:添加数据库驱动依赖
首先,在 continew-common/pom.xml
文件中引入 PostgreSQL 数据库驱动,并根据实际需要移除 MySQL 数据库驱动依赖:
<!-- PostgreSQL Java 驱动 -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
步骤 2:修改数据源配置
修改 application-dev.yml
中的数据源配置。注意:开发环境(dev)默认使用 P6SPY 组件打印 SQL 执行日志,生产环境(prod)则默认不使用 P6SPY,请根据实际环境进行调整:
--- ### 数据源配置
spring.datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:p6spy:postgresql://${DB_HOST:127.0.0.1}:${DB_PORT:5432}/${DB_NAME:continew_admin}?options=-c%20TimeZone=Asia/Shanghai&sslmode=prefer&channelBinding=require&stringtype=unspecified
username: ${DB_USER:postgres}
password: ${DB_PWD:123456}
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
步骤 3:配置 MyBatis Plus
修改 application.yml
中的 MyBatis Plus 配置,设置正确的数据库类型:
--- ### MyBatis Plus 配置
mybatis-plus:
## MyBatis 配置
configuration:
# 数据库类型,用于在 Mapper.xml 中进行数据库区分,以适应不同数据库 SQL 语句
database-id: pgsql
## 扩展配置
extension:
enabled: true
# 分页插件配置
pagination:
enabled: true
db-type: POSTGRE_SQL
步骤 4:更新数据库变更日志
修改 db.changelog-master.yaml
文件,指定 PostgreSQL 相关的初始脚本:
databaseChangeLog:
- include:
file: db/changelog/postgresql/main_table.sql
- include:
file: db/changelog/postgresql/main_column.sql
- include:
file: db/changelog/postgresql/main_data.sql
- include:
file: db/changelog/postgresql/plugin/plugin_open.sql
- include:
file: db/changelog/postgresql/plugin/plugin_tenant.sql
- include:
file: db/changelog/postgresql/plugin/plugin_schedule.sql
- include:
file: db/changelog/postgresql/plugin/plugin_generator.sql
步骤 5:调整代码生成模板
如果你需要使用代码生成功能,还需修改 continew-plugin-generator/src/main/resources/templates/backend/Menu.ftl
文件,将 PostgreSQL 脚本模板的注释放开,并注释掉其他数据库的脚本模板。
完成切换
完成上述所有步骤后,数据库切换配置即告完成。你可以启动项目,验证是否能正常连接到 PostgreSQL 数据库。
注意事项
- 切换数据库前,请确保已备份原有数据库数据,以免数据丢失。
- 如已基于 ContiNew Admin 开发了业务代码,请检查 SQL 代码是否使用了数据库特有函数或语法,并及时调整以确保兼容性。
- PostgreSQL 与 MySQL 在数据类型、函数等方面存在差异,例如字符串处理、日期函数等,需要特别注意。
常见问题
切换到 PostgreSQL 后,有些功能的 SQL 不兼容
Q: 项目目前默认使用 MySQL 数据库,按照文档切换为 PostgreSQL 后发现了一些兼容问题。例如仪表盘的部分 SQL 查询中使用了较多 MySQL 特有函数,导致报错。
A: v3.7.0 版本时 @onekr-billy 大佬增加了 database-id
支持,并且对部分兼容冲突的 SQL 语句增加了 database-id
条件判断。暂定后续采用此种方式解决 SQL 兼容问题。
目前已知的 SQL 兼容问题:
- 仪表盘部分接口 SQL(涉及较多 MySQL 特有函数)
- UserPasswordHistoryMapper 的 deleteExpired 方法
- NoticeMapper 的部分方法
PostgreSQL 适配是 ContiNew Admin 项目迭代过程中多次被社区提出的需求。为此,维护团队在 v2.5.0 版本中初步实现了对 PostgreSQL 的基础支持。然而,受限于系统迭代节奏、开发精力分配、测试环境不足以及实际应用场景有限等因素,目前的适配工作仍停留在基础层面(团队已在尽力平衡多数据库兼容性,采取发现一个问题解决一个问题的策略)。
从项目发展角度看,虽然当前 PostgreSQL 并非核心需求,但考虑到数据库技术发展趋势,完善 PostgreSQL 适配是必然方向,未来甚至可能将其作为默认数据库。
开源项目的魅力在于社区共建。对于需要使用 PostgreSQL 的开发者,我们鼓励您在实际应用中积极反馈遇到的问题,共同完善项目细节。真实的使用场景是发现潜在问题的最佳途径,您的每一条反馈都将助力项目更加成熟。维护团队也将全力提供必要的技术支持。