mybatis配置sql超時時間

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">

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章