일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JPA 공부
- 스프링공부
- 기술면접공부
- JPA공부
- 스프링
- 스프링부트공부
- 스프링 공부
- DDD
- Flutter
- 스프링부트
- K8S
- 알고리즘공부
- JPA스터디
- Axon framework
- 코테준비
- JPA예제
- 자바공부
- 코테공부
- 카프카
- Kafka
- querydsl
- 플러터 개발
- nestjs스터디
- 기술공부
- 플러터 공부
- 자료구조공부
- nestjs
- nestjs공부
- 프로그래머스
- JPA
- Today
- Total
DevBoi
AutoCommit? 본문
테스트 컨테이너와 Spock를 이용해서 테스트 환경을 구축하다가 DB autocommit을 끄는것에 대해서
공부를 해보려고했다. (팀에 고수분이 의견을 주셨다)
1.Autocommit은 무엇일까?
하나의 트랜잭션은 commit이나 rollback을 만나면 종료된다.
트랜잭션의 성질은 ACID를 따르는데 (이건 모르면 직접 찾아보시길)
1,2,3작업이 있다고 가정 한 트랜잭션에 있다면?
1번 작업 후 2번 작업중 이슈가 생기면? 1번 작업은 commit이 될까?
같은 트랜잭션 이라면 2번이 롤백되면서 1번도 롤백된다.
다만 오토 커밋이라고하면 commit을 따로 날려주지않아도 자동으로 커밋되는것이다.
즉 하나의 트랜잭션 내에 여러가지의 쿼리가 있다고 하더라도, 무용지물로 그냥 다 반영 되는것이다.
쉽게 얘기하면, 트랜잭션 그딴거 없고 하나씩 다 바로바로 반영 이다.
2. Autocommit 보는 방법
select @@AUTOCOMMIT; //조회
SET AUTOCOMMIT = 1; // 해제
SET AUTOCOMMIT = 0; // 설정
3.스프링 에서 Autocommit 관련 설정
1) dataSource Bean
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
destroy-method="close"
p:driverClassName="oracle.jdbc.OracleDriver" p:url="jdbc:oracle:thin:@localhost:1521:XE"
p:defaultAutoCommit="false"
p:username="scott"
p:password="tiger"
p:initialSize="10"
p:minIdle="10"
p:maxIdle="100"
p:maxActive="100"
p:maxWait="6000"
/>
True가 기본값이라서, 아무런설정을 안하면 autocommit이 켜있다.
스프링 부트에서는 해당 값으로 설정이 가능하다.
spring.datasource.tomcat.default-auto-commit=true
그러면, 테스트 환경에서 소스가 돌때 어떤 방법이 제일 편할까?
아쉽게도 소스상에서 돌리는 것보다, 어노테이션으로 설정할 수 있다.
스프링에서는 @Test 와 함께 작성된 @Transactional은 항상 Rollback된다.
이를 막기위해서는
@Rollback에 대한어노테이션에서 false로 지정을 같이 해주거나
아래와 같이 작성을 해주면 된다.
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=false)
public class ContactDAOTest {
...
}
'[DataBase]' 카테고리의 다른 글
[Mariadb] create database error (0) | 2023.09.30 |
---|---|
[Database] maraiDb 인코딩 에러 해결 (0) | 2023.07.03 |
[데이터 베이스] 인덱스 동작과정 (0) | 2022.02.16 |
[DB] 슈퍼타입과 서브 타입 (0) | 2022.01.19 |
데이터베이스 인덱스란? (0) | 2021.09.01 |