ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Ruoyi若依框架迁移达梦DM8实战:从配置到SQL改造要点

Ruoyi若依框架迁移达梦DM8实战:从配置到SQL改造要点 去年年底接了个内部项目需求就一句话现有系统基于Ruoyi若依框架底层数据库要从MySQL换到达梦DM8。刚听到这个需求时我还觉得挺简单心想若依这种老牌Java快速开发框架换数据源还不就是改个连接串的事结果从驱动加载到SQL方言从主键自增策略到分页插件硬是折腾了两天两夜才把前后端完整跑通。这篇文章把整个适配过程原原本本记下来给准备接DM8的同学当个参考。文章会覆盖达梦DM8的安装建库、驱动jar的Maven引入、Druid数据源配置、初始化SQL脚本转换、代码层的核心改造以及我在实战中遇到的各种报错和排查思路。适合正在做国产化迁移的Java后端开发也适合课程设计、毕业设计里想用Ruoyi接达梦的同学。我写的内容都是基于我实操过的路径不是纯理论分析。1. 先理清楚Ruoyi接DM8到底难在哪1.1 这个需求从哪来为什么“看着简单”跟数据库选型相关的需求最近两年越来越多。要么是项目投标要求支持国产数据库要么是集团统一下发信创适配指标要么干脆就是毕业设计和课程设计想用点“不一样”的数据库。达梦DM8作为国内数据库里市场占有率比较高的一个自然成了很多团队的第一选择。很多人在任务排期时都会犯一个直觉错误Ruoyi是Spring Boot MyBatis那一套数据库层面无非是JDBC URL、驱动类名、账号密码不一样改完配置重启不就行了吗这个想法在“看起来”的层面完全正确但一旦进入实操就会发现MySQL写法和达梦的SQL方言之间存在大量细节差异。我当初也是抱着“半天搞定”的心态接的结果第一天光处理初始化SQL脚本的语法兼容问题就花了大半天。数据库连接这个事看着是配置问题实际上是驱动、方言、事务、分页、主键生成策略、大小写规则、保留字、字段类型甚至Druid连接池检测SQL的全链路适配。1.2 Ruoyi的数据库兼容性盲区Ruoyi框架本身是一个快速开发平台默认支持MySQL、Oracle、PostgreSQL等常见数据库理论上切换数据源是有一定基础的。但需要注意若依的很多设计习惯是围绕MySQL展开的或者更准确地说它的默认配置和代码生成模板长期在MySQL环境下运行会有一批“只有MySQL才顺滑”的写法沉淀下来。比如最典型的自增主键。Ruoyi的实体类里大量使用TableId(type IdType.AUTO)这种MyBatis-Plus注解风格如果是前后端分离版本或者XML里的useGeneratedKeystrue keyPropertyuserId如果是传统单体版本。MySQL里一个AUTO_INCREMENT就能搞定但在DM8里按照Oracle兼容模式来用就得考虑IDENTITY列或者序列配合触发器。再比如分页。MySQL写LIMIT 0, 10很自然DM8虽然也支持LIMIT语法取决于兼容模式但如果你用的是PageHelper这类分页插件它需要明确知道当前数据库是哪一种方言否则拼接出来的分页语句可能乱套。还有日期格式化函数、空值处理函数、批量插入语法、字段注释写法这些全是坑。更隐蔽的是初始化脚本。Ruoyi官方提供的是ry_2021xxxx.sql这样的MySQL版本脚本里面有ENGINEInnoDB DEFAULT CHARSETutf8mb4有COMMENT注释有反引号。这些SQL直接丢到DM8里执行大概率会在第一个语法报错的地方停下来。所以第一步不是改代码而是先学会“翻译”SQL。1.3 我最终选择的适配方案在动手之前我在网上查了不少帖子也问过几个做过国产化替换的朋友基本上有两种路线。第一种是“大动干戈”给Ruoyi引入一个数据库方言适配层或者干脆把ORM层从MyBatis换成MyBatis-Plus并加上对应的数据库方言配置。这种路线很重改完代码后测试成本高而且Ruoyi的代码生成器生成出来的Mapper XML兼容性也需要逐一确认。第二种是“最小改动”保持Ruoyi的代码结构不动只对数据库初始化脚本做转换对数据源配置做调整对少量确实不兼容的SQL语句做局部修改。这种路线风险可控改动量小也是我最终采用的方式。实际操作上我的核心思路是把DM8理解成一个“Oracle兼容模式为主的数据库”。也就是说能用Oracle写法解决的问题优先按Oracle风格去处理遇到MySQL特有语法就做等价替换。整体改动集中在几个文件里pom.xml、application-druid.yml、初始化SQL脚本以及个别Mapper XML文件中关于自增主键的段落。后端Java代码基本没动这是一个很重要的原则。2. 环境准备把DM8跑起来把驱动送进Maven2.1 DM8安装与建库细节先解决一个“到哪儿下载”的问题。达梦DM8提供开发版和试用版直接去达梦官网的下载中心申请就行个人学习用途可以申请开发版不用付费。下载的时候注意操作系统版本Windows下直接跑安装向导Linux下解压后执行DMInstall.bin。安装过程有几个细节值得说一下。第一初始化实例时会让选择“大小写敏感”这个选项非常关键。如果项目里一直用MySQL很多人习惯建表语句用反引号包小写表名这在MySQL里完全没问题但在达梦里如果开了大小写敏感后续查询时sys_user和SYS_USER会被当成两个对象很容易出现“表或视图不存在”的诡异报错。我的建议是项目里统一用大写习惯去适配或者干脆在初始化实例时确认清楚不要开大小写敏感除非业务强制要求。第二达梦的逻辑结构跟Oracle很像一个用户对应一个Schema模式。新建项目时通常用SYSDBA登录然后创建业务用户并授权比如CREATE USER RUOYI IDENTIFIED BY Ruoyi123; GRANT DBA TO RUOYI;这里给业务用户直接赋DBA权限是为了开发环境方便。生产环境建议按最小权限原则分开授权但如果是课程设计或内部系统DBA权限最省事。建好用户后后续建表、导数据就都用这个用户来操作。第三达梦的默认端口是5236不是3306也不是1521做防火墙配置、容器端口映射时一定要留意。我第一次连接失败就是因为防火墙只放行了3306压根没放行5236。2.2 驱动jar的处理Ruoyi项目本身是Maven工程但达梦的JDBC驱动不会自动从中央仓库下载。达梦安装目录下会带驱动包常见的是DmJdbcDriver8.jar或者DmJdbcDriver18.jar8表示JDK1.8版本18表示更高JDK版本。Ruoyi默认JDK1.8所以我用的是DmJdbcDriver8.jar。这块有一个关键操作把驱动jar安装到本地Maven仓库否则pom.xml里没法引用。命令如下mvn install:install-file -DfileD:/dmdbms/drivers/jdbc/DmJdbcDriver8.jar -DgroupIdcom.dameng -DartifactIdDmJdbcDriver -Dversion8.1.2.192 -Dpackagingjar然后在pom.xml里加依赖dependency groupIdcom.dameng/groupId artifactIdDmJdbcDriver/artifactId version8.1.2.192/version /dependency这里要注意版本号不要乱写以实际安装的jar包版本为准。有些团队习惯直接把驱动jar扔到Tomcat的lib目录Ruoyi如果是打包成jar直接跑Spring Boot内置Tomcat这种方式需要额外配置不如Maven依赖来得干净。2.3 修改数据源配置Ruoyi的数据源配置默认在ruoyi-admin/src/main/resources/application-druid.yml里。需要改的地方主要是这几项spring: datasource: driverClassName: dm.jdbc.driver.DmDriver url: jdbc:dm://127.0.0.1:5236?schemaRUOYI username: RUOYI password: Ruoyi123 druid: validationQuery: SELECT 1 FROM DUAL这里面有三个隐藏坑。第一个是驱动类名达梦的驱动类不是com.mysql.cj.jdbc.Driver而是dm.jdbc.driver.DmDriver别写错。第二个是URL格式。MySQL的URL是jdbc:mysql://ip:port/dbname达梦的URL常见写法是jdbc:dm://ip:portSchema名可以挂在URL后面也可以不写而在SQL里用“用户名.表名”的方式访问。如果应用里经常直接写sys_user这种不带前缀的表名那么最好在URL中指定schemaRUOYI否则默认找的是用户名同名的Schema容易找不到表。第三个是validationQuery。Druid连接池默认会用SELECT 1来检测连接在MySQL里没问题但达梦服务端不一定认这个写法。按Oracle兼容模式改成SELECT 1 FROM DUAL最稳妥。别小看这一行不换的话应用启动时Druid初始化连接池就会报错而且报错信息会让你误以为是网络问题或者认证问题。2.4 初始化SQL脚本要做的“翻译”工作这一步是新手最难受、也是工作量最大的地方。Ruoyi官方脚本里通常包含建库、建表、初始数据、菜单数据等其中quartz.sql是定时任务相关的表ry_xxx.sql是业务表和数据字典。直接把MySQL版本的SQL喂给达梦基本是跑不动的。我处理脚本时按下面几个顺序来“翻译”首先是去MySQL专属语法。ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT系统用户表这种写在CREATE TABLE末尾的段落要删掉注释改成达梦能识别的COMMENT ON TABLE和COMMENT ON COLUMN。反引号要去掉表名和字段名如果不需要强制大小写就统一不带引号。其次是类型替换。MySQL的int(11)在达梦里写INT就行datetime改成TIMESTAMPtext和longtext改成CLOBtinyint(1)改成SMALLINT或者TINYINTvarchar长度保留即可。decimal(10,2)这类精确小数类型保持不变。然后是函数替换。MySQL的IFNULL(a, b)在达梦里可以写成NVL(a, b)DATE_FORMAT(create_time, %Y-%m-%d)要改成TO_CHAR(create_time, YYYY-MM-DD)或TO_DATE相关写法GROUP_CONCAT要改成LISTAGG。这些函数差异在业务SQL里出现频率很高尤其是列表查询的统计功能。最后是批量插入语法。若依初始化脚本里有大量INSERT INTO table (col1, col2) VALUES (...), (...), (...)这种多行VALUES写法MySQL支持但达梦在Oracle兼容模式下未必支持。我的做法是两个要么拆成单条INSERT语句要么改成INSERT ALL INTO ... INTO ... SELECT 1 FROM DUAL的多表插入语法。由于脚本里的初始数据量不算太大我选择了拆成多条单行INSERT这样最不容易出幺蛾子。还有一个小经验一次性把整份脚本全量执行报错后很难定位。建议用达梦自带的DM管理工具Manager分节执行或者按表逐个执行有问题时能立刻定位到具体语句。3. 代码层的几次关键改造3.1 自增主键从AUTO_INCREMENT到序列Ruoyi的sys_user、sys_role、sys_menu这类表都有自增主键。MySQL下面是AUTO_INCREMENT到了达梦按Oracle兼容模式我优先改成了序列加默认值的方式。达梦里创建序列的语法是CREATE SEQUENCE SEQ_SYS_USER START WITH 1 INCREMENT BY 1;然后让表的主键字段使用序列的NEXTVAL。有两种常见做法一种是直接建表时把字段默认值指向序列另一种是在INSERT语句里显式取序列值。考虑到MyBatis的XML里有很多插入操作用selectKey的方式最直观insert idinsertUser parameterTypeSysUser selectKey keyPropertyuserId resultTypelong orderBEFORE SELECT SEQ_SYS_USER.NEXTVAL FROM DUAL /selectKey insert into sys_user (user_id, user_name, ...) values (#{userId}, #{userName}, ...) /insert这样改的好处是Java代码里不需要额外处理主键回填插入后userId会自动带出来。原来useGeneratedKeystrue keyPropertyuserId这种写法如果数据库不严格执行自增列的话可能会导致在主键生成时出问题所以我统一换成了selectKey方案。不过这里有个现实麻烦Ruoyi的Mapper XML有几十个不可能全手工改。我的做法是先全局搜索useGeneratedKeys相关的插入语句优先改造跟用户、角色、菜单、部门、字典、通知公告、操作日志相关的核心Mapper。代码生成器生成的那些业务表后面单独看是否需要。另外还有一个思路如果建表时把主键字段设置成IDENTITY(1, 1)那么达梦可以模拟MySQL的自增列很多INSERT语句甚至不用带主键字段。但这么做有个限制就是一张表只能有一个IDENTITY列而且如果表里有特殊的数据迁移逻辑IDENTITY列的表现可能不如序列灵活。我出于稳妥考虑还是用了序列方案。3.2 分页插件和方言让LIMIT不再报错Ruoyi默认集成了PageHelper分页插件。在MySQL环境下PageHelper会自动识别MySQL方言生成带LIMIT的分页语句。切到达梦后如果不做任何配置PageHelper可能把它当成MySQL来拼SQL也可能因为无法识别方言而报错。解决办法是在配置里显式指定方言。Ruoyi的application.yml或application-druid.yml里可以增加pagehelper: helper-dialect: dm reasonable: true supportMethodsArguments: true这里的关键就是helper-dialect: dm。老版本的PageHelper可能没有内置达梦方言这时候要考虑升级PageHelper版本或者把方言指定为oracle。达梦和Oracle有很多相似之处指定为Oracle方言在大多数情况下也能跑通但要注意如果SQL里用了达梦特有的语法还是得用dm方言更准确。改完配置后一定要记得重启应用验证几个典型分页场景比如用户管理列表、角色管理列表。我在实际测试中发现分页插件报错往往不是第一次请求就触发而是当总记录数超过一页、需要查询第二页时才暴露出来。所以验证时别只看第一页。3.3 大小写、保留字、字段类型三大兼容点这三个问题我放在一起说因为它们在排查时特别容易混淆。大小写方面达梦默认把不带引号的标识符转换成大写存储而若依的表名基本是小写查询语句里也是小写。如果不开启大小写敏感这种大小写不一致通常不会导致问题如果初始化实例时开启了大小写敏感那么所有表名、字段名得严格按大写来写或者建表时用双引号强制保留小写。我建议走“不敏感”路线省去一堆麻烦。保留字方面达梦有一些保留字和MySQL不完全一样比如USER、ROLE、TYPE、LEVEL、COMMENT、SIZE这些。如果初始化表里恰好有同名字段建表或查询时就会报语法错误。Ruoyi自带表相对规范但代码生成器生成业务表时字段名如果叫comment、level这种就要特别小心。遇到这种情况优先改字段名实在不能改就在SQL里用双引号包起来但双引号可能引发大小写敏感的新问题所以还是改字段名最干净。字段类型方面最容易踩的是小数和日期。达梦的DECIMAL类型在MyBatis里映射到Java的BigDecimal没问题但如果SQL里做了除法或聚合返回类型可能变成DOUBLE或NUMERIC这时候实体类里的Long或Integer类型字段就可能报“类型不匹配”的异常。日期类型上DATE和TIMESTAMP的区分要仔细若依的create_time字段建表时最好用TIMESTAMP避免某些场景下丢失时分秒。3.4 数据权限、多数据源与ShardingSphere的额外注意Ruoyi有一个非常实用的功能就是数据权限通过DataScope注解往SQL里拼接部门过滤条件。这个功能本身不依赖具体数据库但在切换DM8后要注意拼接进去的SQL片段里有没有MySQL特有函数比如IFNULL、DATE_FORMAT等。若依自带的data_scope相关SQL相对简单一般不会出问题但如果你在业务里重写过查询SQL并且里面混了这些函数就会在运行时炸出来。多数据源方面Ruoyi支持通过DS注解切换数据源底层用Druid管理。如果你需要同时在项目里保留MySQL和一个达梦数据源要在数据源配置里把两者都定义好并且给达梦数据源单独配置正确的驱动类名、URL和方言。Druid的spring.datasource.druid配置是按数据源拆分的别改了一个就把另一个覆盖掉。还有同学的项目里用了ShardingSpheresharding-jdbc-spring-boot-starter如果Ruoyi父工程里引入了这个组件并且做了分库分表那事情会复杂一点。ShardingSphere本身需要知道后端数据库类型好决定SQL解析和方言改写。接到达梦时ShardingSphere不一定能自动识别需要查看版本是否支持达梦或者改成单数据源直连。我这次项目里没上ShardingSphere但网上有人踩过这个坑先提醒一句。4. 实战排错那些能逼疯人的报错整理4.1 连接被拒与驱动加载失败这类报错通常是两个方向。第一个是网络层面报错信息类似“Communications link failure”或者“Connection refused: connect”。先别急着怀疑代码用命令行工具确认一下端口telnet 127.0.0.1 5236如果端口不通检查达梦服务有没有启动、防火墙是否放行5236、云服务器安全组是否允许访问。这个是最基础也最容易忽视的。第二个是驱动类加载失败报错“java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver”。这种基本就是驱动jar没打进工程里。先看pom.xml有没有引入再跑一次mvn dependency:tree看依赖里有没有DmJdbcDriver。还有一种奇怪情况是jar包引了但版本冲突多个数据库驱动包挤在一起类加载器加载到了别的Driver实现这时候要把无关驱动从依赖里排除掉。4.2 SQL编译错误与“表或视图不存在”“ORA-00942: table or view does not exist”这类报错是达梦兼容Oracle模式下最常见的。遇到这个信息第一反应不要默认表真的不存在先排查两种可能。第一种是Schema不对。你当前登录的账号是RUOYI但表建在了SYSDBA下SQL里写SELECT * FROM sys_user数据库会在当前Schema下找这张表找不到就报不存在。解决方式很简单要么写全RUOYI.sys_user要么在连接URL里指定schemaRUOYI。第二种是大小写不一致。如果用双引号建了表表名被强制成小写保存那么不带引号查sys_user时达梦会转成SYS_USER去找结果找不到。这种问题最磨人因为看起来表确实存在查询却报找不到。我的排查方法是直接把报错信息里的标识符用大写写一遍试一下或者用达梦的DM管理工具查看表结构的真实存储名称。4.3 启动时数据源初始化失败Ruoyi用的是Druid连接池启动时报错经常是一大串堆栈但核心往往在“Get Connection error”或“DataSource init failed”。这时候先看配置里的validationQuery是不是SELECT 1。MySQL可以这么写达梦里建议改成SELECT 1 FROM DUAL。另外Druid的filters配置里如果启用了wallSQL防火墙它内置的SQL语法校验规则可能不认识达梦方言导致一些正常SQL被拦截。如果你确认SQL没问题但Druid一直报“sql injection violation”可以先关掉wall等兼容性调整好后再针对性开启。实际项目中很多团队直接用stat过滤器做监控就够了wall在异构数据库迁移时容易误伤。4.4 分页查询异常与Count统计错误分页查询报错主要有两种。第一种是PageHelper不认识达梦方言生成的SQL语法不对一般从控制台能看到类似“缺少关键字”或者“LIMIT附近有语法错误”的信息。这种就是按前面说的在配置里加helper-dialect: dm或者升级PageHelper版本。第二种是分页的COUNT查询出问题。PageHelper执行分页时会先包一层SELECT count(0) FROM (原SQL)去统计总数。如果原SQL里有CLOB字段或者复杂的GROUP BY达梦在统计时可能报“数据类型不一致”或“字段长度超限”。这种我一般把原SQL里不需要的CLOB字段在统计语句中排除掉或者检查一下哈希分组相关参数。反正记住一条统计查询只要能拿到总数凑合的性能问题可以后面再优化能跑通才是第一位的。4.5 Docker、远程连接与core文件问题现在很多项目是容器化部署Ruoyi应用打成jar包扔进Docker数据库也在Docker里或者宿主机上。这里常见的坑是应用容器访问达梦时连接串里写了localhost或127.0.0.1结果指向的是容器自身。正确做法是在容器启动时用--networkhost或者连接串写宿主机在局域网内的IP。如果是Docker Compose编排两个容器要在同一个网络里并且用服务名互相访问。还有同学遇到过“dm8数据库core文件生成”的问题。这个一般不是应用层面的而是达梦服务进程在异常情况下生成了core dump文件可能的原因包括内存不足、数据库文件损坏、信号异常等。排查思路是先看达梦的日志文件比如dm_实例名_日期.log里面通常会记录详细的错误信息。core文件本身比较大定位到问题后可以清理掉但不要盲目删除后不去看原因否则问题还会复现。如果是Docker里运行的达梦服务生成core文件还要检查容器日志和宿主机的/proc/sys/kernel/core_pattern配置有时候服务被OOM Killer杀掉后也会留下core文件。这个场景比较少见但遇上了挺吓人我就亲眼见过一个开发环境因为core文件把磁盘塞满导致整个数据库直接不可写。4.6 Navicat等工具连接与前端“背锅”问题有些同学喜欢用Navicat连接达梦这个要看版本。新版本的Navicat Premium里已经提供了DM数据库的连接类型选择达梦后会要求填主机、端口、用户名、密码逻辑跟连MySQL差不多。老版本如果没内置DM类型也可以通过配置驱动的方式连但步骤繁琐不如直接用达梦自带的DM管理工具或者DataGrip。连接工具还有一个常见问题用工具连上达梦后看到的表名全是大小写混合的“怪异名称”或者中文注释变成乱码。这多半是字符集配置不对工具的连接字符集和数据库实例字符集不一致导致的。达梦安装时默认字符集一般是UTF-8工具连接时也选UTF-8基本能解决。另外我看有些人在若依表单里遇到treeselect下拉框、日期控件和输入框宽度不一致的问题怀疑是不是换了数据库导致的。这个真不是数据库的锅是若依前端select、date-picker这些组件的样式继承问题看看ruoyi-ui里的全局CSS就行。别把时间浪费在数据库连接上。5. 最终验证与效率工具建议5.1 上线前按这个清单过一遍数据库切换不是“能启动就万事大吉”很多问题要等到操作特定功能时才浮出来。我这次在最终验证阶段列了一个回归清单逐项检查一是核心管理功能包括用户新增、编辑、删除角色分配菜单权限保存部门树展示。这些操作涉及主键生成、日期字段、逻辑删除等多个环节最容易暴露不兼容。二是数据权限功能用不同角色登录看数据范围过滤是否生效。这个主要检查MyBatis拼接SQL里的语法兼容性。三是代码生成器Ruoyi的代码生成器会查询数据库表结构、生成代码。如果生成器里的SQL用了MySQL特有函数切到DM8后可能无法生成代码。我建议在验证阶段生成一张新的业务表测试一下走完增删改查和分页流程。四是定时任务Ruoyi内置QuartzQuartz的表结构和初始化SQL在quartz.sql里。如果这个脚本没正确导入任务调度模块启动就会报错。达梦下Quartz的脚本也要做和业务脚本一样的语法转换不能拿MySQL原始脚本硬跑。五是登录日志和操作日志这两个模块每次请求都会写库如果插入语句不兼容可能整个功能流程卡在日志这一步表现就是“点击登录没反应”或者“操作成功但页面报错”。除了功能流程还要检查数据库隔离级别和事务配置。Spring Boot默认情况下用的是数据库默认隔离级别MySQL是REPEATABLE READ达梦按Oracle兼容模式一般是READ COMMITTED。如果业务里有依赖隔离级别的读写逻辑结果可能不同。这个不用过度紧张但要知道有区别。5.2 调试达梦效率翻倍的几个方法最后分享几个我在这个项目里觉得非常提效的调试技巧都是实操中养成的习惯。第一是打开SQL日志。Ruoyi的application.yml里通常有logging.level.com.ruoyidebug或者MyBatis的SQL输出配置。切到DM8后建议把SQL日志打开出问题时能看到最终发送给数据库的SQL语句再拿到DM管理工具里执行一遍很容易定位是语法问题还是数据问题。第二是习惯用disql批量执行脚本。如果你用DM管理工具的图形界面执行大脚本容易卡死可以考虑用命令行工具disql脚本文件直接提交执行结果和错误信息更清楚。命令行方式在容器环境里尤其方便。第三是查看执行计划。达梦跟Oracle一样支持EXPLAIN查看SQL执行计划。如果某个查询在MySQL下很快、切到达梦后变得很慢多半是索引没建对或者SQL写法触发不了索引。把慢SQL复制到DM管理工具里看一下执行计划里的索引扫描情况比瞎猜效率高得多。第四是用好达梦的兼容视图。达梦提供了一系列以V$开头的系统视图比如V$SESSIONS、V$LOCK、V$PARAMETER可以用来排查会话和锁的问题。如果应用出现了“锁等待”或“会话数过多”类的报错去这些视图里查一下能省不少时间。还有一个很小但很实用的点达梦对带外键的表在删除或更新时的默认行为可能和MySQL不完全一样。如果初始化脚本里表之间有关联测试删除用户或部门时注意观察是否出现外键约束类的报错。如果不需要外键约束建表时直接不加如果需要就要把约束名和删除规则理清楚。我在这次适配里最大的感触是数据库国产化替换真正麻烦的不是数据库本身而是历史SQL资产里那些MySQL“习惯性写法”。把初始化脚本逐个函数、逐个类型地审一遍比在代码里做各种花式适配有效得多。如果你准备接这个活我建议先把Ruoyi自带的ry_xxx.sql和quartz.sql完整翻译一遍把表和字段的真实存储形态摸清楚再动代码。另外达梦的版本差异比较大不同小版本对SQL方言的支持细节略有不同实际操作时以你手头环境的实测结果为准。总的来说这个方案是可行且可控的只是需要一点耐心别指望改个配置就完事。
返回列表