### Cause: dm.jdbc.driver.DMException: 列[URI]长度超出定义

文章描述了一个由于URI列长度超出数据库定义导致的DMException异常。错误出现在SpringJDBC和MyBatis的数据操作过程中。解决方案是改变前端请求方式,避免过长参数放在URL中,而是使用对象接收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

### Cause: dm.jdbc.driver.DMException: 列[URI]长度超出定义

报错信息:

### Cause: dm.jdbc.driver.DMException:[URI]长度超出定义
;[URI]长度超出定义; nested exception is dm.jdbc.driver.DMException:[URI]长度超出定义
	at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
	at com.sun.proxy.$Proxy65.insert(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)
	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
	at com.sun.proxy.$Proxy85.insert(Unknown Source)
	at com.hlxx.service.Impl.SysRequestServiceLogImpl.insert(SysRequestServiceLogImpl.java:24)
	at com.hlxx.interceptor.TokenInterceptor.preHandle(TokenInterceptor.java:122)
	at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:151)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1035)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at com.hlxx.interceptor.RepeatedlyReadFilter.doFilter(RepeatedlyReadFilter.java:41)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
Caused by: dm.jdbc.driver.DMException:[URI]长度超出定义

原因:
在前端发送请求时,把过多参数放在url中引起

在这里插入图片描述
在这里插入图片描述
改为用对象接受,不直接放在url中
在这里插入图片描述
在这里插入图片描述

暂时禁用动态数据源进行修改(返回完整yml文件代码):server: port: 8089 # tomcat: # uri-encoding: utf-8 # #最小线程数 # min-spare-threads: 500 # #最大线程数 # max-threads: 2000 # #最大链接数 # max-connections: 6500 # #最大等待队长度 # accept-count: 1000 # #链接建立超时时间 # connection-timeout: 12000 spring: datasource: tomcat: max-wait: 50 max-active: 60000 min-idle: 20 initial-size: 20 dynamic: primary: mdt strict: true datasource: mdt: url: jdbc:mysql://47.122.54.87:20012/mdt?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true username: root password: fjyrdl@2024 driver-class-name: com.mysql.cj.jdbc.Driver type: com.zaxxer.hikari.HikariDataSource # certificate: # url: jdbc:mysql://47.111.234.74:20081/xh?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8 # username: dwz # password: lBz_o99ZrL # driver-class-name: com.mysql.cj.jdbc.Driver # type: com.zaxxer.hikari.HikariDataSource hikari: connection-timeout: 60000 #等待连接池分配链接的最大时长(毫秒) idle-timeout: 60000 #一个连接idle状态的最大时长(毫秒) max-pool-size: 60 #连接池中允许的最大连接数 min-idle: 10 validation-timeout: 3000 redis: #数据库索引 database: 0 host: 47.122.54.87 port: 20016 #password: password jedis: pool: #最大连接数 max-active: 8 #最大阻塞等待时间(负数表示没限制) max-wait: -1 #最大空闲 max-idle: 8 #最小空闲 min-idle: 0 #连接超时时间 timeout: 10000 # data: # mongodb: # uri: mongodb://119.3.157.129/admin # database: palm-college # username: yirui # password: fjyrdl%2020% # authentication-database: admin rabbitmq: host: 47.122.54.87 port: 20015 username: guest password: guest swagger: # 是否开启swagger enabled: false #
最新发布
03-18
<think>嗯,用户想要一个禁用Dynamic数据源后的完整Spring Boot YML配置文件示例。首先,我需要确认用户提到的“Dynamic数据源”具体指的是什么。通常,这可能是指动态数据源切换,比如使用类似com.baomidou.dynamic-datasource-spring-boot-starter这样的第三方库。禁用的话,可能需要移除相关配置或者设置特定的属性。 根据用户提供的引用内容,特别是引用[1]中的spring.batch.initialize-schema和spring.batch.job.enabled等属性,用户可能在使用Spring Batch,并且希望保留这些配置。同时,需要确保数据源的基本配置正确,但禁用动态数据源功能。 动态数据源通常涉及配置多个数据源,并可能通过注解或配置类进行切换。要禁用它,可能需要将相关配置排除,或者设置dynamic为primary数据源,并关闭自动加载多数据源的功能。例如,在YML中设置spring.datasource.dynamic.primary和spring.datasource.dynamic.strict为false,或者直接移除dynamic的配置部分。 另外,需要确保其他Spring Boot的基本配置正确,比如应用名称、服务器端口、数据源连接信息等。同时,用户可能希望保留Spring Batch和Spring Integration的配置,如引用[2]中提到的spring.integration.poller和spring.sleuth相关属性。 因此,完整的YML文件应该包括应用的基本配置、数据源的基本设置(不使用动态数据源)、Spring Batch的配置,以及其他可能需要的组件如MyBatis、JPA等的配置。需要检查是否有动态数据源特定的属性需要注释掉或删除,例如dynamic: datasource部分,并确保主数据源使用标准的spring.datasource.url等属性。 最后,给出一个示例配置,确保语法正确,属性正确禁用动态数据源,并包含用户提到的引用中的相关配置,如spring.batch.job.enabled: true等。同时,可能需要添加注释说明哪些部分用于禁用动态数据源,并提示用户如何根据实际数据库调整驱动类和URL。</think>根据Spring Boot配置规范和动态数据源禁用要求,整理完整yml示例如下: ```yaml # 应用基础配置 spring: application: name: demo-service profiles: active: dev # 主数据源配置 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/main_db?useSSL=false&serverTimezone=UTC username: root password: 123456 hikari: connection-timeout: 30000 maximum-pool-size: 20 # 禁用动态数据源配置 autoconfigure: exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 保留批处理配置 batch: initialize-schema: embedded job: enabled: true schema: classpath:org/springframework/batch/core/schema-@@platform@@.sql table-prefix: BATCH_ # 集成配置 integration: poller: fixed-delay: 1000 max-messages-per-poll: 1 # 服务端口配置 server: port: 8080 servlet: context-path: /api # MyBatis配置 mybatis: mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true # 其他组件配置示例 logging: level: root: INFO org.springframework: WARN ``` §§禁用配置说明§§ 1. 移除了所有`spring.datasource.dynamic`相关配置 2. 通过`spring.autoconfigure.exclude`排除动态数据源自动配置类[^4] 3. 保留标准数据源配置作为主数据源 4. 完整包含批处理基础配置[^1]和集成配置[^2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值