java:mysql切换达梦数据库(五分钟适配完成)

背景

因为项目需要国产数据库的支持,选择了达梦数据库,由于我们之前使用的是MySQL
 今天我们就来说一说,如何快速的切换到达梦数据库,原本这一章我打算写VIP章节的
 后续想想,就纯分享。毕竟是国产数据库

迁移数据库

这里的话,我就不细说安装和迁移数据库的具体操作的,达梦自带的迁移工具就能迁移,比较简单。
客户端连接工具的话,我使用的是SQLark百灵连接
地址如下:

SQLark百灵连接

程序适配

说一下之前使用的框架
springboot+mybatis-plus+mysql

驱动选择

我们是使用java语言,所以就选择jdbc驱动

在这里插入图片描述
大家根据自己的要求进行选择
在这里插入图片描述
这里我选择的是:DmJdbcDriver8.jar

没有的话 这里进行下载:
go、java、python等语言的达梦数据库驱动

驱动引入

我们DmJdbcDriver8.jar 把放到项目的lib文件下面,如果没有lib目录就新创建一个
在这里插入图片描述

pom文件 更改

我们在pom.xml中在dependencies中增加引入

	<dependency>
			<groupId>com.dm</groupId>
			<artifactId>DmJdbcDriver18</artifactId>
			<version>1.8</version>
			<scope>system</scope>
			<systemPath>${project.basedir}/lib/DmJdbcDriver8.jar</systemPath>
		</dependency>

然后在build下的plugins下的plugin的configuration中增加下面一句

	<includeSystemScope>true</includeSystemScope>

如:
在这里插入图片描述

配置更改

在application.properties文件中

更改数据库配置

spring.datasource.url=jdbc:dm://xx.xx.xx.xx:5237/xx?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
spring.datasource.username=SYSDBA
spring.datasource.password=xxx
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver

如果遇到druid过滤器报错
在application.properties文件中 加上这2个配置

spring.datasource.druid.filters=stat,log4j
spring.datasource.druid.filter.wall.enabled=false

然后就可以启动项目验证了。

遇到的问题

数据库user表关键字

有个表因为历史遗留问题,表名叫user,是达梦数据库的保留字段。
我把user表修改成sys_user就可以了。

达梦数据库中没有GROUP_CONCAT函数

我把GROUP_CONCAT函数 修改成了LISTAGG函数

### Spring Boot 应用程序配置实现达梦数据库 (DM)MySQL 数据库兼容 为了使 `Spring Boot` 应用程序能够同时支持达梦数据库(DM)和 MySQL,可以采用多数据源配置的方式。通过定义多个数据源并指定不同的实体管理器来区分不同类型的数据库操作。 #### 配置文件设置 在 `application.yml` 或者 `application.properties` 中分别配置两个数据源: ```yaml spring: datasource: dm: url: jdbc:dm://localhost:5236/dmdbname username: root password: rootpassword driver-class-name: dm.jdbc.driver.DmDriver mysql: url: jdbc:mysql://localhost:3306/mysqldbname?useSSL=false&serverTimezone=UTC username: root password: rootpassword driver-class-name: com.mysql.cj.jdbc.Driver ``` 上述配置指定了两个独立的数据源连接字符串、用户名、密码以及驱动类名称[^1]。 #### 多数据源 Java 配置 创建相应的配置类用于初始化这两个数据源及其事务管理器: ```java import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; @Configuration @MapperScan(basePackages = "com.jay.mapper.dm", sqlSessionFactoryRef="dmSqlSessionFactory") public class DMDataSourceConfig { @Bean(name = "dmDataSource") @ConfigurationProperties(prefix = "spring.datasource.dm") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "dmSqlSessionFactory") public SqlSessionFactory testSqlSessionFactory(@Qualifier("dmDataSource") DataSource dataSource)throws Exception{ final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath*:mapper/dm/*.xml")); return sessionFactory.getObject(); } } ``` 对于 MySQL 的配置同样遵循此模式,只需更改包路径和其他特定属性即可。 #### 使用场景切换 当需要访问某个具体数据库时,在服务层可以通过注入对应的 `SqlSessionTemplate` 来执行查询命令;也可以利用 JPA 实现更复杂的业务逻辑处理。如果希望在同一方法内跨两种数据库工作,则应考虑使用分布式事务解决方案如 XA 协议或消息队列机制确保一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚开发小咸鱼

原创不宜,请作者喝杯咖啡吧。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值