springboot+mybatisplus+达梦数据库

2年前 (2022) 程序员胖胖胖虎阿
411 0 0

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(无限制)。
springboot+mybatisplus+达梦数据库

版权声明:程序员胖胖胖虎阿 发表于 2022年9月7日 上午2:48。
转载请注明:springboot+mybatisplus+达梦数据库 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...