나는 봄에 mysql에 쓰기 위해 ibatis를 사용하고있다.spring ibatis mysql 간헐적 인 비동기 문제
간헐적 인 버그가 있습니다. 프로세스의 각 사이클마다 DB에 두 개의 행을 씁니다. 이전주기의 행을 읽은 다음주기. 때로는 (30 번에 한 번, 때로는 더 자주, 때때로 덜) DB에서 한 줄만 가져옵니다.
내가 생각할 수있는 모든 캐싱을 해제했습니다. 내하는 SQLMaps-config.xml 파일은 말한다 :
<sqlMapConfig>
<settings enhancementEnabled="false" statementCachingEnabled="false" classInfoCacheEnabled="false"/>
<sqlMap resource="ibatis/model/cognitura_core.xml"/>
다른 봄 캐싱 또는 iBATIS를 또는 내가 부족 MySQL의 드라이버가 일부 비동기가 있는가, 또는? 봄 3.0.5 사용
는 MySQL의 커넥터 - 자바 5.0.5
EDIT 1, 2.3.5의 MyBatis :
내가 연결 (C3P0)의 풀을 사용하고 있기 때문에 될 수 있을까요? 독서 중일 때 삽입물이 계속 실행 중입니까? 이상하게 보입니다. 명시 적으로 asynch를 선언하지 않으면 모든 것이 동 기적으로 발생한다고 생각 했습니까?
제안 해 주셔서 감사합니다. 그건 아주 유망한 소리 .. 난 당신이 SqlSession.commit()에 의해 무슨 뜻인지 모르겠다. 삽입을 getSqlMapClientTemplate()처럼 호출하고 있습니다. insert ("insertIterationHistory", dataMap); - 템플릿에 커밋 메소드가없는 것 같습니다. @Transaction으로 메소드에 주석을 달아야합니까? 나는 커밋이 어디에서 일어나기로되어 있는지 정말로 모르겠다. 나는 각 인서트가 기본적으로 자동으로 커밋 될 것이라고 생각했다. – bruce
Hmmm .. 나는 단지 http://old.nabble.com/how-to-dusable-asynch-threads---td21196742.html을 읽고 비동기 설명에 가중치를 추가했다. . 나는 단지 동기식으로 일을하는 다른 연결 풀을 사용하려고한다고 생각한다. – bruce
MyBatis 3과 같이 미안하다. 그 원리는 동일하다. DB 커밋을 얻으려면 트랜잭션이 필요하므로 DataSourceTransactionManager가 구성되어 있고 Spring 구성에서 와 같은 것을 가지고 있다고 가정하면 주석을 추가해야합니다. –
AngerClown