若依管理系统默认使用
MySQL
作为数据库,这篇文章将介绍如何将数据源切换为PostgreSQL
。
在 ruoyi-admin
项目中添加 PostgreSQL
驱动:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.18</version>
</dependency>
接着,修改配置文件,将数据源设置为 PostgreSQL
:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: org.postgresql.Driver
druid:
# 主数据源配置为 PostgreSQL
master:
url: jdbc:postgresql://127.0.0.1:5432/FDS?stringtype=unspecified
username: postgres
password: ts123456
由于 PostgreSQL
没有 dual
表,配置文件中的 validationQuery
需要改为:select version()
以检测数据库连接是否正常。
application.yml
中的 PageHelper
分页插件也需调整为支持 PostgreSQL
:
pagehelper:
helperDialect: postgresql
supportMethodsArguments: true
params: count=countSql
以下是一些常见的 SQL 调整:
sysdate()
,替换为 now()
。ifnull(字段, '')
替换为 COALESCE(字段, '')
。mapper.xml
文件中 status = 0
的语法改为 status = '0'
。char
类型字段的值,在 PostgreSQL
中必须加引号。'query'
替换为 query
。database()
,替换为 CURRENT_SCHEMA()
。对于有自增主键的表,必须配置自增序列:
CREATE SEQUENCE sys_user_id_seq
START WITH 3
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
-- 配置表字段自增
ALTER TABLE sys_user ALTER COLUMN user_id SET DEFAULT nextval('sys_user_id_seq');
例如:
CREATE SEQUENCE sys_oper_log_id_seq
START WITH 3
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE sys_oper_log ALTER COLUMN oper_id SET DEFAULT nextval('sys_oper_log_id_seq');
重复上述步骤,为需要自增的字段添加序列。
对于有默认值的 char
类型字段,在 PostgreSQL
中需要手动添加默认值,同时要注意加引号。例如在 sys_user
、sys_role
、sys_dept
表中的 del_flag
和 status
字段,需设置默认值并加引号。其他表如 sys_menu
、sys_post
、sys_notice
等也需要进行相同的设置。
调整代码中的数据类型与值:
SysRole.java
中,将 menuCheckStrictly
和 deptCheckStrictly
修改为 int
类型。在 index.vue
中相应地将 menuCheckStrictly
和 deptCheckStrictly
的值从 true
改为 1
。此外,注释掉 vue
文件中涉及“父子联动”的代码。
GenTableMapper.xml
中 selectDbTableList
方法:<select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">
SELECT * FROM information_schema.tables
WHERE table_schema = (SELECT CURRENT_SCHEMA())
AND table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%'
AND table_name NOT IN (SELECT table_name FROM gen_table)
<if test="tableName != null and tableName != ''">
AND LOWER(table_name) LIKE LOWER(CONCAT('%', #{tableName}, '%'))
</if>
</select>
若不打算使用数据库,只需使用 RuoYi 提供的工具类,可以去掉以下类的 init
方法:
SysConfigServiceImpl.java
位于 com/ruoyi/system/service/impl/SysConfigServiceImpl.java
:SysDictTypeServiceImpl.java
位于 com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
:SysJobServiceImpl.java
位于 com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
:这样即可完成 PostgreSQL 数据源的切换。
powered by kaifamiao