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에 지정된다.
반응형