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

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日
  • 展开全部

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?