mybatis如果不配置,默認超時時間是不做限制的。當系統慢sql很多時,勢必會增加數據庫壓力,系統性能及穩定性降低。所以有必要要設置sql超時設置,下面配置超時時間是5分鍾。
第一步:全局配置如下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- 全局超時配置,300表示sql執行時間超過5分鍾時,報錯 --> <configuration> <settings> <setting name="defaultStatementTimeout" value="300" /> </settings> </configuration>
第二步:在sqlSessionFactory引入該配置
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath*:config/mybatis/**/mapper_*.xml" /> <!-- 引入mysql的全局配置,超時,緩存等 --> <property name="configLocation" value="classpath:config/mybatis/mysql.xml" /> </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean>
上面的配置,后面所有通過 sqlSessionTemplate的查詢都是有超時限制的。如果時間超過5分鍾就會報錯。報錯信息為Statement cancelled due to timeout or client request。
當然對於個別情況,有的sql需要執行很長時間或其他的話,可以對單個sql做個性化超時設置。
在mapper xml文件中對具體一個sql進行設置,方法為在select/update/insert節點中配置timeout屬性,依然是以秒為單位表示超時時間並只作用於這一個sql
<select id="queryList" parameterType="hashmap" timeout="10000">