Victor_An 2022-08-22 10:17 采纳率: 100%
浏览 557
已结题

com.microsoft.sqlserver.jdbc.SQLServerException: 服务器无法继续执行该事务

sqlserver 事务报错 com.microsoft.sqlserver.jdbc.SQLServerException: 服务器无法继续执行该事务

com.microsoft.sqlserver.jdbc.SQLServerException: 服务器无法继续执行该事务

问题相关代码

用的baomidou.dynamic.datasource 管理数据源。
所以这里的事务注解用的是 @DSTransactional,与单数据源下的 spring的 @Transactional一样。
我这里操作的是同一个数据源,没有跨数据源操作。
以下代码在 windows上面正常运行,在linux上报错
1,2,3,4,步的log正常打印。第5步中,是在请求一个接口,分页同步数据,批量insert 到sqlserver,insert时候抛出下文中的异常。
代码:

    @Override
    @DSTransactional
    @XxlJob("GoodsMasterData")
    public void syncData() {
        LocalDateTime start = LocalDateTime.now();
        // 1.删掉backup表,
        dataOptMapper.dropIfExists(GOODS_MASTER_DATA_BACKUP);
        log.info("drop table :{}", GOODS_MASTER_DATA_BACKUP);
        // 2.查询建表语句
        String createSql = dataOptMapper.selectSqlserverCreateTableSql(GOODS_MASTER_DATA);
        // 3.goods_master_data表rename为goods_master_data_backup
        dataOptMapper.renameTable(GOODS_MASTER_DATA, GOODS_MASTER_DATA_BACKUP);
        log.info("rename table :{}, {}", GOODS_MASTER_DATA, GOODS_MASTER_DATA_BACKUP);
        // 4.创建新的goods_master_data表
        dataOptMapper.createTable(createSql);
        log.info("create table :{}", GOODS_MASTER_DATA);
        // 5.开始同步数据
        int syncTotalCount = this.forSync();
        syncDataLogService.insertSyncDataLog(start, LocalDateTime.now(), 1, syncTotalCount, StringUtils.EMPTY, GOODS_MASTER_DATA);
    }

druid 线程池配置

spring.datasource.dynamic.datasource.proddb.druid.initialSize=5
spring.datasource.dynamic.datasource.proddb.druid.minIdle=5
spring.datasource.dynamic.datasource.proddb.druid.maxActive=20
spring.datasource.dynamic.datasource.proddb.druid.maxWait=60000
spring.datasource.dynamic.datasource.proddb.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.dynamic.datasource.proddb.druid.minEvictableIdleTimeMillis=300000
spring.datasource.dynamic.datasource.proddb.druid.validationQuery=SELECT 1
spring.datasource.dynamic.datasource.proddb.druid.testWhileIdle=true
spring.datasource.dynamic.datasource.proddb.druid.testOnBorrow=false
spring.datasource.dynamic.datasource.proddb.druid.testOnReturn=false
spring.datasource.dynamic.datasource.proddb.druid.poolPreparedStatements=true
spring.datasource.dynamic.datasource.proddb.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.dynamic.datasource.proddb.druid.connection-properties=druid.stat.mergeSql=true;ruid.stat.slowSqlMillis=5000
spring.datasource.dynamic.datasource.proddb.druid.useGlobalDataSourceStat=true
spring.jpa.hibernate.ddl-auto=none
运行结果及报错内容
java.lang.reflect.InvocationTargetException at
 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.base/java.lang.reflect.Method.invoke(Method.java:566) 
at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:31) at com.xxl.job.core.thread.JobThread.run(JobThread.java:163) 
Caused by: org.springframework.jdbc.UncategorizedSQLException:
### Error updating database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 服务器无法继续执行该事务。
说明: 7100000001### The error may involve defaultParameterMap 
### The error occurred while setting parameters ### SQL: INSERT INTO goods_master_data ( 

我的解答思路和尝试过的方法

本地环境 java11,windows11 正常运行
线上环境 java11,ubuntu22,抛出异常,去掉事务注解@DSTransactional 正常运行。

本地环境与线上环境请求的数据一样。

我想要达到的结果

网上资源很少,想知道是什么问题。

  • 写回答

3条回答 默认 最新

  • IT技术分享社区 数据库领域优质创作者 2022-08-25 12:27
    关注

    按照你的报错,应该还是sql插入数据的问题,字段数据长度有问题。最好把插入的sql 打印出来。
    你去掉事务就是可以部分sql执行成功

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月2日
  • 已采纳回答 8月25日
  • 修改了问题 8月22日
  • 专家修改了标签 8月22日
  • 展开全部

悬赏问题

  • ¥15 C++数组中找第二小的数字程序纠错
  • ¥50 MATLAB APP 制作出现问题
  • ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
  • ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
  • ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
  • ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
  • ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
  • ¥15 信息管理系统的查找和排序
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
  • ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)