весна ибатис mysql прерывистая асинхронная проблема - PullRequest
1 голос
/ 15 декабря 2010

Я использую ibatis весной для записи в mysql.

У меня периодически возникает ошибка.На каждом цикле процесса я пишу две строки в БД.Следующий цикл я читаю в строках предыдущего цикла.Иногда (один раз из 30, иногда чаще, иногда реже) я получаю только один ряд из БД.

Я отключил все кеширование, которое только могу себе представить.Мой sqlmap-config.xml просто говорит:

<sqlMapConfig>
<settings enhancementEnabled="false" statementCachingEnabled="false" classInfoCacheEnabled="false"/>

<sqlMap resource="ibatis/model/cognitura_core.xml"/>

Есть ли какая-то асинхронность, или же кеширование для весеннего или ibatis или драйвера mysql, который я пропускаю?1011 * Использование spring 3.0.5, mybatis 2.3.5, mysql-connector-java 5.0.5

РЕДАКТИРОВАТЬ 1:

Может ли это быть, потому что я использую пул соединений (c3p0)?Возможно, вставка все еще работает, когда я читаю.Хотя это странно, я думал, что все будет происходить синхронно, если я не объявлю явно asynch?

Ответы [ 2 ]

0 голосов
/ 24 октября 2017

У меня похожее поведение. Это то, что я делаю. У меня есть старая версия 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'
}
0 голосов
/ 16 декабря 2010

Вы вызываете SqlSession.commit () после вставки? C3P0 асинхронно «закрывает» соединения, которые могут вызывать commit под прикрытием. Это может объяснить поведение, которое вы видите.

...