1

我在春天使用 ibatis 写入 mysql。

我有一个间歇性错误。在进程的每个循环中,我将两行写入数据库。下一个周期我从上一个周期的行中读取。有时(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)吗?当我阅读时,插入是否可能仍在运行。不过,这很奇怪,我认为除非我明确声明异步,否则一切都会同步发生?

4

2 回答 2

0

你在插入后调用 SqlSession.commit() 吗?C3P0 异步“关闭”连接,这可能在幕后调用 commit。这可以解释您所看到的行为。

于 2010-12-16T01:50:42.637 回答
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'
}
于 2017-10-24T02:08:53.517 回答