트랜젝션을 사용하는 이유
트랜젝션을 이용하는 이유는 A가 B에게 돈을 보낸다고 가정하면 A에게서 돈을 차감하고 B에게 돈을 증가시켜야 한다.
이때 만약 B에게 돈을 증가시키는 도중 예외가 발생한다면 A는 돈이 차감된 상태로 끝나버린다.
그러면 돈이 공중분해되는 상황이 만들어 진다.
따라서 어디서든 예외가 발생되어 완료하지 못했다면 작업을 하기 이전으로 돌아가 주는 트랜젝션을 이용해야 한다.
트랜젝션 환경설정
porm.xml에 Repository를 추가한다
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.9.1</version>
<scope>runtime</scope>
</dependency>
applicationContext에 트랜젝션을 관리하는 빈(객체)을 등록하고 어노테이션 기반으로 트랜젝션을 설정할 수 있도록
<tx:annotation-driven> 태그를 등록한다.
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
그다음 트랜젝션을 사용할 메서드 위에 @Transactional을 추가하면
메서드가 실행 중 예외가 발생하면 rollback()이 될 것이다.
@Transactional
@Override
public void test(){
...
}
'스프링' 카테고리의 다른 글
spring java로 DI (0) | 2022.10.25 |
---|---|
xml을 활용한 객체 주입 (0) | 2022.10.25 |
ResponseEntity란? (0) | 2022.10.18 |
@RestController , @Controller의 차이 (1) | 2022.10.18 |
intellij spring 프로젝트 생성 (0) | 2022.10.11 |