春季ibatis mysql间歇性异步问题
题
我在春季使用ibatis写信给mySQL。
我有一个间歇性的错误。在一个过程的每个周期中,我将两行写入DB。我从上一个周期的行中读取的下一个周期。有时(有时在30中有一次,有时更频繁,有时更少)我只从DB中回来一排。
我已经关闭了我能想到的所有缓存。我的sqlmap-config.xml只是说:
<sqlMapConfig>
<settings enhancementEnabled="false" statementCachingEnabled="false" classInfoCacheEnabled="false"/>
<sqlMap resource="ibatis/model/cognitura_core.xml"/>
是否有一些异步,或者在弹簧或Ibatis或我缺少的MySQL驱动程序中缓存?
使用弹簧3.0.5,mybatis 2.3.5,mysql-connector-java 5.0.5
编辑1:
可能是因为我正在使用连接池(C3P0)?我阅读时插入是否仍在运行。不过,这很奇怪,我认为除非我明确宣布Asynch,否则一切都会同步发生?
解决方案
您是否在插入后调用sqlsession.commit()? C3P0异步“关闭”连接,该连接可能在封面下呼叫。这可以解释您看到的行为。
其他提示
我得到了类似的行为。这就是我在做的。我有一个旧版本的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'
}
不隶属于 StackOverflow