我在春天使用ibatis写入mysql。
我有间歇性的错误。在进程的每个循环中,我向db写入两行。我在上一个周期的行中读取的下一个周期。有时候(30次中有一次,有时更频繁,有时候更少)我只从数据库中取回一行。
我已经关闭了我能想到的所有缓存。我的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,mybatis 2.3.5,mysql-connector-java 5.0.5
编辑1:
可能是因为我正在使用连接池(c3p0)吗?我正在阅读时插件是否仍然可以运行。但这很奇怪,我认为除非我明确宣布asynch,否则一切都将同步发生?
答案 0 :(得分:0)
您是否在插入后调用SqlSession.commit()? C3P0异步“关闭”连接,这可能是在封面下调用提交。这可以解释你所看到的行为。
答案 1 :(得分:0)
我得到了类似的行为。这就是我正在做的事情。我有一个旧版本的IBATIS我不打算升级。您可以轻松地将其移动到装饰器中。
SqlMapSession session = client.openSession();
try {
try {
session.startTransaction();
// do work
session.commitTransaction();
// The transaction should be committed now, but it doesn't always happen.
session.getCurrentConnection().commit(); // Commit again :/
} finally {
session.endTransaction();
}
} finally {
session.close(); // would be nice if it was 'AutoCloseable'
}