Springboot项目mysql迁移达梦数据库
由于国产化项目跟进,数据库指定使用达梦数据库(简称DM),项目本身使用mysql,于是切换数据库的需求产生了。
一、MySQL数据库表迁移到DM
使用达梦数据迁移工具,新建工程-新建迁移-配置mysql连接
配置好达梦数据库连接后下一步,在指定对象复制时,目的模式一定要使用SYSDBA,要不然项目就要重构,在每个select语句表前都加模式名,非常麻烦(踩坑记见底部)。
然后就下一步、执行就行了,使用dump、sql脚本导入类似。
二、整合DM驱动到spring项目中
1,DM的驱动就在DM的安装目录下,根据说明文件,使用对应版本的即可。
2,DM的驱动没有在maven仓库目录中,新建一个lib目录,把驱动包放进来
使用maven的scope本地导入方式
<!--DM JDBC驱动 -->
<dependency>
<groupId>dm.jdbc</groupId>
<artifactId>DmJdbcDriver</artifactId>
<version>18</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/DmJdbcDriver18.jar</systemPath>
</dependency>
当scope为system的时候打包不会自动打包进去的,所以要添加一个参数才能打包进去的
1 <plugin>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring-boot-maven-plugin</artifactId>
4 <configuration>
5 <includeSystemScope>true</includeSystemScope>
6 </configuration>
7 </plugin>
三、spring项目配置文件修改
spring:
application:
name: demo
datasource:
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://172.19.45.26:5236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
username: SYSDBA
password: 123456789
四、问题记录
1,couldn't deduct database type from database product name 'DM DBMS'
很明显activity不支持达梦数据库,所以这个国产化项目中不能使用activity了。
2,Cause: dm.jdbc.driver.DMException: 第1 行附近出现错误
达梦数据库查表方式: select * from "库名"."模式名"."表名",没有指定表?可是在配置连接时已经制定了表了啊。原来,DM的数据库和mysql的数据库管理方式不同,DM是以类似sqlserver的方式--实例的方式管理多个库。
这里DM的模式,不代表mysql中的库,要创建DM的库(实例),要使用DM的数据库配置助手新建一个端口号不同的实例
否则,目前连接到的这个库使用SYSDBA这个模式下的表,要使用自定义新建的CENTERBUSINESS下的表,需要在sql中加上模式名:select * from 模式名.表名。而项目中mybatis生成的sql是不带模式名的,所以报错。因为目前mybatis还没有提供统一添加模式名的配置,因此只能去所有的mapper文件中在每一个sql中的表名前添加模式名,这不现实。因此,我们要把所有表导到SYSDBA这个模式下,以前mysql的多个库就多建几个DM实例,目前只有这样处理比较合适。
原来配置文件的URL:
jdbc:dm://172.19.45.26:5236/CENTERBUSINESS?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
其中CENTERBUSINESS为模式名,DM不支持这样配!于是从新使用达梦数据迁移工具导入表到SYSDBA模式下。
配置文件URL修改为:
jdbc:dm://172.19.45.26:5236/SYSDBA?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8(SYSDBA为库名,也可不写,默认就是)
再次启动项目,启动成功!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)