<실습>
package com.fastcampus.ch3;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import javax.sql.DataSource;
@Service
public class TxService {
@Autowired A1Dao a1Dao;
@Autowired B1Dao b1Dao;
@Autowired
DataSource ds;
// @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void insertA1WithTx() throws Exception {
PlatformTransactionManager tm = new DataSourceTransactionManager(ds);
DefaultTransactionDefinition txd = new DefaultTransactionDefinition();
txd.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = tm.getTransaction(txd);
try {
a1Dao.insert(1,100); // 성공
insertB1WithTx();
a1Dao.insert(1,200); // 실패
tm.commit(status);
} catch (Exception e) {
e.printStackTrace();
tm.rollback(status);
} finally {
}
}
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void insertB1WithTx() throws Exception {
b1Dao.insert(1,100); // 성공
b1Dao.insert(1,200); // 실패
}
public void insertA1WithoutTx() throws Exception {
a1Dao.insert(1,100);
a1Dao.insert(1,200);
}
// @Transactional // RuntimeException, Error만 rollback
@Transactional(rollbackFor = Exception.class) // Exception을 rollback
public void insertA1WithTxFail() throws Exception {
a1Dao.insert(1,100);
a1Dao.insert(1,200);
}
@Transactional
public void insertA1WithTxSuccess() throws Exception {
a1Dao.insert(1,100);
a1Dao.insert(2,200);
}
}
다시 실습하기
'Spring' 카테고리의 다른 글
| ch04 02. Mybatis로 DAO 작성하기 (0) | 2023.03.16 |
|---|---|
| ch4 01. MyBatis의 소개와 설정 (0) | 2023.03.16 |
| ch3 20. 서비스 계층의 분리와 @Transactional(2) (0) | 2023.03.15 |
| ch3 19. 서비스 계층의 분리와 @Transactional(1) (0) | 2023.03.15 |
| ch3 18. AOP의 개념과 용어 (0) | 2023.03.14 |