由於有2個task表t_task和e_task,代碼中Insert了t_task后馬上select t_task然后把結果Insert到e_task,結果發現經常e_task會沒有任何數據。
原因分析:使用mycat后讀寫分離,select語句會去從庫讀取t_task,這個時候很可能從庫還沒有把主庫的t_task同步到e_task,導致查詢不出來t_task所以e_task也沒有插入。
所以對於這種毫秒級的insert后馬上查詢,可以用如下的語句保證select語句走mycat的主庫,解決這個bug
<select id="selectOneTaskByCode" resultMap="BaseResultMap">
/*#mycat:db_type=master*/ select * from t_task where task_code=#{taskCode}
</select>