아무거나

[spring] 트랜잭션(Transaction) - 1 본문

Java & Kotlin/Spring

[spring] 트랜잭션(Transaction) - 1

전봉근 2019. 12. 26. 00:36
반응형

[spring] 트랜잭션(Transaction) - 1

 

트랙잭션이란 논리적 단위로 어떤 한 부분의 작업이 완료되었다 하더라도, 다른 부분의 작업이 실패할 경우 전체 취소되는 것이다.

이때, 작업이 완료되는것을 커밋(commit), 취소(이전으로 되돌리다)되는 것을 롤백(rollback)이라한다.

-> 일상생활에서는 카드 결제나 마일리지 적립 ATM 등 사용된다.

 

1. dao에 트랜잭션 관련 내용 추가

   [testDao.java]

....

PlatformTransactionManager transactionManager; // 트랜잭션 매니저 선언

// 트랜잭션 매니저 setter 추가
public void setTransactionManager( PlatformTransactionManager transactionManager) {
	this.transactionManager = transactionManager;
}

....

public void buyTest(final TestDto dto) {
TransactionDefinition definition = new DefaultTransactionDefinition(); // 트랜잭션이 구동하는데 기본적으로 필요한 객체
TransactionStatus status = transactionManager.getTransaction(definition); // 트랜잭션의 설정정보를 꺼내옴

// 성공했을때 실패했을때 트랜잭션을 사용해야하므로 try ~ catch 선언
try {
    .... (저장로직)
    transactionManager.commit(status);  // 성공적으로 되면 트랜잭션에서 commit을 해준다.
} catch (Exception e) {
	e.printStackTrace();
	transactionManager.rollback(status); // 실패하면 트랜잭션에서 rollback을 해준다.
}

....

....

 

2. 스프링 설정파일에 설정(src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml)

   [servlet-context.xml]

....

<!-- 트랜잭션 매니저 설정 -->
<beans:bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<beans:property name="dataSource" ref="dataSource" />
</beans:bean>

<!-- DAO객체에 트랜잭션 매니저를 만들고 거기에 참조하고있다.  -->
<beans:bean name="dao" class="com.javalec.spring_pjt_ex.dao.TicketDao" >
    <beans:property name="template" ref="template" /> <!-- JDBC템플릿 -->
    <beans:property name="transactionManager" ref="transactionManager" /> <!-- 트랜잭션 매니저 -->
</beans:bean>

....

 

* class path를 모르는경우 직접 java파일에 해당 패키지를 추가해보면 class path가 import에 지정된다.

 

참고: https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EC%8A%A4%ED%94%84%EB%A7%81-%EA%B0%95%EC%A2%8C/dashboard

반응형
Comments