springboot+mybatisplus+达梦数据库
- 1 达梦安装
- 2 springboot项目适配
-
- 2.1 pom依赖
- 2.2 数据库配置信息
- 3 注意事项
- 4 问题汇总
-
- 4.1 dbType not support
- 4.2 无效的表或视图名
- 4.3 超过了当前用户最大连接限制
1 达梦安装
安装过程可直接看官方文档,文档上写的很详细,照着操作完全没有问题。
官方文档:https://eco.dameng.com/docs/zh-cn/start/index.html
注意先阅读一下官方提供的常见问题https://eco.dameng.com/docs/zh-cn/faq/index.html,避免进坑。。减少问题解决成本。(本人在整合中遇到几个问题后,才突然注意到官方的常见问题文档,并且之前遇到过的问题在文档中都有提到)
2 springboot项目适配
2.1 pom依赖
添加达梦数据库驱动依赖:
<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm8JdbcDriver18</artifactId>
<version>8.1.1.49</version>
</dependency>
2.2 数据库配置信息
spring:
datasource:
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:mysql://<ip>:<port>/<数据库名>?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: root
注意:需要去掉配置文件中spring.datasource.druid.filters中的wall配置,不然会报错dbType not support,详情可看问题汇总中的4.1 dbType not support。
3 注意事项
1、达梦数据库设置成大小写敏感时,小写的标识符需要用双引号括起,否则会被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写。
2、建议数据库表、列名等使用大写字母
3、资源设置注意合理性,避免发生超过最大连接限制的情况
4 问题汇总
以下是在进行整合时,遇到过的问题,在此做个记录。
4.1 dbType not support
【问题描述】:
java.lang.IllegalStateException: dbType not support : dm, url jdbc:dm://192.168.200.66:5237/DMDBUSER?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
at com.alibaba.druid.wall.WallFilter.init(WallFilter.java:167) ~[druid-1.1.20.jar:1.1.20]
at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:832) ~[druid-1.1.20.jar:1.1.20]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1930) ~[spring-beans-5.3.21.jar:5.3.21]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1872) ~[spring-beans-5.3.21.jar:5.3.21]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.21.jar:5.3.21]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.21.jar:5.3.21]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.21.jar:5.3.21]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.21.jar:5.3.21]
【解决方法】:
因配置了 wall Filter(防火墙过滤),去掉 wall 配置,即对应配置文件里的把 fitter 的 wall 删掉即可解决,如下:
spring:
datasource:
druid:
# filters这里的wall去掉!!!!!
filters: stat,slf4j
filter:
slf4j:
enabled: true
stat:
log-slow-sql: true
merge-sql: true
slow-sql-millis: 3000
# 这边的wall也得去掉!!!!!!
# wall:
# config:
# ····这里的配置信息就先省略了····
# enabled: true
4.2 无效的表或视图名
【问题描述】
mybatisplus自动生成的 sql 语句查询时报错,具体报错信息如下:(原来项目使用的数据库为mysql,查询正常)
2021-07-04 12:37:05.069 [HTTPHandler-6-44] ERROR com.springbootplus.common.exception.GlobalExceptionHandler - exception:
org.springframework.dao.DataIntegrityViolationException:
### Error querying database. Cause: dm.jdbc.driver.DMException: 第4 行附近出现错误:
无效的表或视图名[SYS_USER]
### The error may exist in com/springbootplus/system/domain/mapper/SysUserMapper.java (best guess)
### The error may involve com.springbootplus.system.domain.mapper.SysUserMapper.selectList
### The error occurred while executing a query
### SQL: SELECT id,user_name,nick_name,password,salt,phone,email,sex,head,remark,state,department_id,version,create_time,update_time FROM sys_user WHERE deleted=0 AND (user_name = ?)
### Cause: dm.jdbc.driver.DMException: 第4 行附近出现错误:
无效的表或视图名[SYS_USER]
; 第4 行附近出现错误:
无效的表或视图名[SYS_USER]; nested exception is dm.jdbc.driver.DMException: 第4 行附近出现错误:
无效的表或视图名[SYS_USER]
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104) ~[spring-jdbc-5.3.21.jar:5.3.21]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) ~[spring-jdbc-5.3.21.jar:5.3.21]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) ~[spring-jdbc-5.3.21.jar:5.3.21]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) ~[spring-jdbc-5.3.21.jar:5.3.21]
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91) ~[mybatis-spring-2.0.7.jar:2.0.7]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) ~[mybatis-spring-2.0.7.jar:2.0.7]
at com.sun.proxy.$Proxy332.selectList(Unknown Source) ~[?:?]
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) ~[mybatis-spring-2.0.7.jar:2.0.7]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166) ~[mybatis-plus-core-3.5.2.jar:3.5.2]
【问题原因】
达梦数据库在设置成大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写。报错时,整体状态为:达梦数据库设置的为大小写敏感,数据库表及字段都为小写。由报错可只,达梦在查询时,已经将数据库表sys_user转成了大写SYS_USER进行查询,因数据库中无大写的SYS_USER表,进而查询失败。
【解决方法】
1、将达梦数据库设置为大小写不敏感
2、重新编写SQL查询语句,将数据库表名及列名使用双引号括起来
3、将数据库表及列名改为大写
4.3 超过了当前用户最大连接限制
【问题描述】
dm.jdbc.driver.DMException: 超过了当前用户最大连接限制
at dm.jdbc.driver.DBError.throwException(DBError.java:635) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at dm.jdbc.c.a.n.J(MSG.java:221) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at dm.jdbc.c.a.n.G(MSG.java:181) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at dm.jdbc.c.a.n.F(MSG.java:162) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at dm.jdbc.c.a.a(DBAccess.java:759) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at dm.jdbc.c.a.login(DBAccess.java:301) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
at dm.jdbc.c.a.s(DBAccess.java:171) ~[Dm8JdbcDriver18-8.1.1.49.jar:- 8.1.1.49 - Production]
【解决方式】
打开DM管理工具,连接到数据库,选择用户 --> 管理用户 --> 选中报错项目使用的用户,右击选择修改,选择资源设置项,修改最大会话数为合适的值,也可以设置为0(无限制)。