出問題了的程序在執行中調用了一個存儲過程,該存儲過程有兩個返回參數具體程序如下:
1>ibatis配置文件:
<parameterMap id="backAwardMap" class="java.util.HashMap">
<parameter property="resultValue" mode="OUT" jdbcType="VARCHAR" javaType="java.lang.String"/>
<parameter property="v_errmsg" mode="OUT" jdbcType="VARCHAR" javaType="java.lang.String"/>
</parameterMap>
<procedure id="callBackAward" parameterMap="backAwardMap">
{call pro_lottery_backaward(?,?)}
</procedure>
</sqlMap>
2>dao:
public void executeBackAward(Map map) {
getSqlMapClientTemplate().queryForObject("callBackAward",map);
}
進過對比,發現這個存儲過程的調用有所不同,使用了queryForObject方法,原意是該執行不需要控制事務。不必調用insert或者update方法。將上述調用修改成:
public void executeBackAward(Map map) {
getSqlMapClientTemplate().update("callBackAward",map);
}
部署後,運行一天再也沒有出現CUP被過高佔用的情況。到此問題得到解決。