由於國產化項目跟進,數據庫指定使用達夢數據庫(簡稱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為庫名,也可不寫,默認就是)
再次啟動項目,啟動成功!