spring ibatis mysql间歇性异步问题

时间:2010-12-15 20:38:22

标签: java mysql spring ibatis mybatis

我在春天使用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,否则一切都将同步发生?

2 个答案:

答案 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'
}