【国产化】spring boot项目 原oracle替换成达梦

国产化啊,路漫漫其修远兮啊,这次要把项目用的oracle换成达梦,数据库方面的数据移植交给运维同事做了,我这里做的是服务里的替换,主要是改一些配置
首先是驱动 jar,pom文件里把之前oracle的驱动去掉,引上达梦的驱动

<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmJdbcDriver18</artifactId>
    <version>8.1.3.140</version>
</dependency>

这里是直接中央仓库down的,18的版本,对应就是jdk8,达梦官网都有介绍就不多说了,其实达梦的安装目录下面就带了驱动jar包的,也可以去安装目录取。
然后就是spring boot的配置文件,数据库的

spring:
  datasource:
    driver-class-name: "dm.jdbc.driver.DmDriver"
    url: "jdbc:dm://localhost:5236
    druid:
     filters: stat

主要是注意驱动的class-name ,url里的协议名
我这里用的druid,这里加了filters,我之前没加filters的时候,会报错,报dbType not support,我这里一开始是这样
dbType not support: null,后面跟的是null,研究了下发现druid里的配置里是没有达梦的,发现是druid的版本低了,引了高版本就好了,一般来说这个报错是:dbType not support : dm,后面跟的是 dm,报这个错的话,可以试下加这个 filters 配置,我是加了这个配置好了,他这里防火墙过滤了dm。
然后我发现服务起来后,有部分sql报错,报的是
Invalid bound statement (not found)
然后我去看了下报错的那个mapper里的sql,发现它里面长这样

<select id="listPage" databaseId="oracle">
</select>

有个databaseId属性,而且指定了oracle
然后看了下配置类
我们项目里用的多数据库源 DatabaseIdProvider,配置是这样的

    @Bean
    public DatabaseIdProvider getDatabaseIdProvider(){
        DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
        Properties properties = new Properties();
        properties.setProperty("Oracle","oracle");
        properties.setProperty("MySQL","mysql");
        properties.setProperty("DB2","db2");
        properties.setProperty("Derby","derby");
        properties.setProperty("H2","h2");
        properties.setProperty("HSQL","hsql");
        properties.setProperty("Informix","informix");
        properties.setProperty("MS-SQL","ms-sql");
        properties.setProperty("PostgreSQL","postgresql");
        properties.setProperty("Sybase","sybase");
        properties.setProperty("Hana","hana");
        databaseIdProvider.setProperties(properties);
        return databaseIdProvider;
    }

properties.setProperty这个方法俩参数,前面的是数据库产品名,后面的是自己取得数据库别名
这个东西可以在mapper的标签里写 databaseId 属性来指定走哪个数据库,也就是说,比如oracle的分页跟mysql的分页不一样,那你可以在mapper里写俩方法,分别指定为oracle和mysql,那么数据源在运行的时候会去mapper里找对应的数据库别名,找那个 databaseId ,如果没找到,就找不带 databaseId 的,如果再没找到就报错了,所以我这个报错估计就是因为没有达梦的配置,也没有缺省的配置,只有个oracle的配置,没找到就报错了。
然后看了下达梦是适配oracle的sql的,那我直接加一个配置,让达梦走oracle的sql不就行了吗,

properties.setProperty("DM DBMS", "oracle");

在上面配置类里加了一行这个,然后打包部署,运行,成功了!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值