Spring을 사용하여 JUnit 테스트에서 SQL 스크립트를 실행하려고합니다. 스크립트는 테스트 용 데이터를 설정하는 데 사용됩니다. 그러나 스크립트가 실행될 때 스크립트의 INSERT는 각 테스트 후에 커밋됩니다. 스프링 문서에서는 DDL로 롤백 할 것을 기대하지 않지만 내 스크립트의 모든 내용은 DML입니다. 포함 된 것은 INSERT 문과 마지막 삽입 ID (SET @blah = LAST_INSERT_ID())입니다.스프링 테스트를 사용하여 SQL 스크립트를 실행하면 변경 내용이 커밋됩니다.
구성이 잘못 되었나요? 나는 이것을 MySQL 데이터베이스에 사용하고있다. 우리의 구성은 다음과 같습니다 :
다음은 몇 가지 연구를 기반으로하고 있습니다. executeSqlScript에 대한 첫 번째 호출은 별도의 트랜잭션에서 실행됩니다. Spring의 SimpleJdbcTemplate.update 메소드는 executeSqlScript에 의해 호출된다. 이것은 연결 풀에서 가져온 JDBC 연결 범위이므로 DB에 대한 후속 액세스에서 동일한 연결을 보장하지 않으므로 동일한 트랜잭션에서 실행되도록 보장 할 수 없습니다.
TransactionManager 나 (Hibernate Session Factory)를 통해 모든 DB 작업을 수행한다면 내부 트랜잭션이 트랜잭션을 범위 지정하는 방식 때문에 작동합니다. SimpleJdbcTemplate.update 나는 동일한 트랜잭션에서 테스트하고있어 이후 실제 코드를 실행하는 방법
그림 아웃 : 여기 내 옵션에 있습니다. 나는 내가 이것을 할 수 있다고 생각하지만, 지금까지는 내 노력이 효과가 없었다.
모든 테스트 데이터가 SessionFactory를 통해 설정 되었습니까? 따라서 JDBC를 통해 직접 SQL 스크립트를 실행하는 대신 모델 객체를 채우고 최대 절전 모드 DAO를 통해이를 유지할 수 있습니다.
여기 올바른 길에 있습니까? 누구든지 더 이상의 지침을 제공 할 수 있습니까?
데이터 소스 설정은 보일 다음 장소입니다 – sw1nn