Ibatis.Net执行Sql超时commandTimeout的一个坑

项目中使用了Ibatis.Net,数据库是Mysql,在做一个批量Update的操作时,需要执行40几秒,在执行到30秒的时候,会抛出异常:Timeout expired , The timeout period elapsed prior to completion of the operation or the server is not responding

网上一查,说设置mysql的command timeout,于是在Ibatis.Net的providers.config文件里设置了commandTimeout="600" 参数。

结果一测试,还是报错,一样的异常。。。

没办法了,只能跟踪一下Ibatis.Net的源码,终于发现了SqlMapSession.CreateCommand这个方法里有个坑。。。就是把_connection.ConnectionTimeout赋值给了command.CommandTimeout。。。

这上面竟然还注释着 MySql provider doesn‘t support it !

还好,找到了原因,就能解决,在MySql的连接字符串上加上

Connect Timeout=600

这样Ibatis.Net就会把它赋值给command.CommandTimeout

测试不再报错了,ok问题解决

时间: 2024-08-01 03:29:34

Ibatis.Net执行Sql超时commandTimeout的一个坑的相关文章

C#参数化执行SQL语句,防止漏洞攻击本文以MySql为例【20151108非查询操作】

为什么要参数化执行SQL语句呢? 一个作用就是可以防止用户注入漏洞. 简单举个列子吧. 比如账号密码登入,如果不用参数, 写的简单点吧,就写从数据库查找到id和pw与用户输入一样的数据吧 sql:select id,pw where id='inputID' and pw='inputPW'; 一般情况没什么问题,但如果用户输入的id或PW带 ‘ ,这是可能就会出现漏洞,bug了 比如用户输入的id是: 1‘ or ’1‘=‘1 这是sql语句执行的是:select id,pw where id

为什么要参数化执行SQL语句呢?

C#参数化执行SQL语句,防止漏洞攻击本文以MYSQL为例[20151108非查询操作] 为什么要参数化执行SQL语句呢? 一个作用就是可以防止用户注入漏洞. 简单举个列子吧. 比如账号密码登入,如果不用参数, 写的简单点吧,就写从数据库查找到id和pw与用户输入一样的数据吧 sql:select id,pw where id='inputID' and pw='inputPW'; 一般情况没什么问题,但如果用户输入的id或PW带 ' ,这是可能就会出现漏洞,bug了 比如用户输入的id是: 1

java 执行sql脚本的3种方式 (ant,ibatis,ScriptRunner)

package com.unmi; import java.io.*; import org.apache.tools.ant.*; import org.apache.tools.ant.taskdefs.*; import org.apache.tools.ant.types.*; /** * 调用 ant.jar 的 SQLExec 执行 SQL 脚本文件 * @author Unmi */ public class AntExecSql { /** * @param args */ pu

JDBC连接MYSQL,批量执行SQL语句或在执行一个SQL语句之前执行一个SQL语句

conn = MysqlJdbcUtils.getConnection(); Statement ps=conn.createStatement(); ps.addBatch("truncate QB_ShowCount_Asite_copy"); ps.executeBatch(); String SrcSql = "select convert(unhex(hex(convert(Community using latin1))) using utf8) as Commu

API解读第二篇——执行SQL的核心对象(JDBC)

结构图 核心对象 Statement Statement主要用来执行SQL语句.它执行SQL语句的步骤为: 第一步:创建statement对象. 第二步:配置statement对象,此步骤可以忽略. 第三步:调用statement的executeXXX方法执行SQL语句. 第四步:处理结果集.示例中只是打印结果集. 第五步:关闭statement对象. Statement执行SQL语句的方法有四种类型. execute执行返回结果包含一个或者多个结果集,或结果包含一个或多个更新记录数量的SQL语

在mybatis执行SQL语句之前进行拦击处理

比较适用于在分页时候进行拦截.对分页的SQL语句通过封装处理,处理成不同的分页sql. 实用性比较强. import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.Properties; import org.apache.ibatis.e

MyBatis-Spring 执行SQL语句的流程

1. 从SqlSessionDaoSupport开始 通常我们使用MyBatis会让自己的DAO继承SqlSessionDaoSupport,那么SqlSessionDaoSupport是如何运作的呢,下面是SqlSessionDaoSupport的源代码 /* * Copyright 2010 The myBatis Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may n

mysql 执行sql文件的方法

http://philos.iteye.com/blog/162051 实战代码: #mysql导入mysql -um4n -p01D060A476642BA8335B832AC5B211F222F641B5 -h192.168.1.175 -D sse_db < 33002.bbs.ids_final mysql -um4n -p01D060A476642BA8335B832AC5B211F222F641B5 -h192.168.1.175 -D sse_db < 33002.bbs.ids

ibatis批量执行分析

最近做pos数据文件解析及入库的开发,其中pos的流水文件一个文件中就包含8000多条数据,每次插入数据库执行的sql都是相同的.因此考虑到使用批量插入来提升效率.查看ibatis的文档,看到提供了startBatch和executBatch两个方法,看名字大概就知道这两个方法和批量执行有关.我立马在之前的for循环外面加上了这两个方法: sqlMap.getSqlMapClient().startBatch();for (Map<String, Object> map : list) {