我在春季使用ibatis寫入mysql。spring ibatis mysql間歇性異步問題
我有一個間歇性的錯誤。在一個進程的每個循環中,我向db寫入兩行。下一個週期我讀取上一個週期的行。有時候(30次中的一次,有時更頻繁,有時更少),我只從db獲取一行。
我關閉了所有我能想到的緩存。我的SqlMap-config.xml中只是說:
<sqlMapConfig>
<settings enhancementEnabled="false" statementCachingEnabled="false" classInfoCacheEnabled="false"/>
<sqlMap resource="ibatis/model/cognitura_core.xml"/>
有一些不同步,或者緩存到Spring或iBatis的或者說我失蹤了MySQL驅動程序?
使用Spring 3.0.5,2.3.5的MyBatis,使用mysql-connector-java的5.0.5
編輯1:
難道是因爲我使用的連接(C3P0)的池?閱讀時插入是否仍在運行?這很奇怪,但是,我認爲一切都會同步發生,除非我明確宣佈異步?
感謝您的建議。這聽起來很有希望..我不確定你的意思是SqlSession.commit()。我調用插入像getSqlMapClientTemplate()。insert(「insertIterationHistory」,dataMap); - 該模板似乎沒有提交方法。我應該只用@Transaction註釋該方法嗎?我想我真的不明白提交應該發生在哪裏。我認爲每個插入將默認自動提交.. – bruce 2010-12-16 03:47:29
嗯..我剛剛閱讀http://old.nabble.com/how-to-dusable-asynch-threads---td21196742.html增加你的異步解釋的權重。我想我只是要使用不同的連接池來同步執行任何操作。 – bruce 2010-12-16 03:56:06
對不起,誤解爲MyBatis 3.原理相同。您需要一個事務來獲取數據庫提交,因此添加註釋應該可行,假設您已經配置了DataSourceTransactionManager並且在您的Spring配置中具有類似於的東西。 –
AngerClown
2010-12-16 12:49:41