Transaction 처리
1. 트랜잭션 관리 클래스 생성
2. MyBatisSupport.java 코드 생성
@Service("myBatisSupport")
public class MyBatisSupport {
@Autowired(required = true)
@Qualifier("sqlSession")
protected SqlSessionTemplate sqlSession;
@Autowired
ApplicationContext applicationContext;
public MyBatisTransactionManager getTransactionManager() {
return applicationContext.getBean(MyBatisTransactionManager.class);
}
}
@Service
@Scope("prototype")
public class MyBatisTransactionManager extends DefaultTransactionDefinition {
private static final long serialVersionUID = 1L;
@Autowired
PlatformTransactionManager transactionManager;
TransactionStatus status;
public void start() throws TransactionException {
status = transactionManager.getTransaction(this);
}
public void commit() throws TransactionException {
if (!status.isCompleted()) {
transactionManager.commit(status);
}
}
public void rollback() throws TransactionException {
if (!status.isCompleted()) {
transactionManager.rollback(status);
}
}
public void end() throws TransactionException {
rollback();
}
}
4. root-context.xml 에 아래 코드 삽입
5. Transaction 처리 코드
1. 트랜잭션 관리 클래스 생성
2. MyBatisSupport.java 코드 생성
@Service("myBatisSupport")
public class MyBatisSupport {
@Autowired(required = true)
@Qualifier("sqlSession")
protected SqlSessionTemplate sqlSession;
@Autowired
ApplicationContext applicationContext;
public MyBatisTransactionManager getTransactionManager() {
return applicationContext.getBean(MyBatisTransactionManager.class);
}
}
3. MyBatisTransacrionManager.java 코드 생성
@Service
@Scope("prototype")
public class MyBatisTransactionManager extends DefaultTransactionDefinition {
private static final long serialVersionUID = 1L;
@Autowired
PlatformTransactionManager transactionManager;
TransactionStatus status;
public void start() throws TransactionException {
status = transactionManager.getTransaction(this);
}
public void commit() throws TransactionException {
if (!status.isCompleted()) {
transactionManager.commit(status);
}
}
public void rollback() throws TransactionException {
if (!status.isCompleted()) {
transactionManager.rollback(status);
}
}
public void end() throws TransactionException {
rollback();
}
}
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean class="com.fogs.myapp.common.mybatis.MyBatisTransactionManager" scope="prototype" />
5. Transaction 처리 코드
MyBatisTransactionManager transaction = getTransactionManager();
transaction.start();
try {
DB 처리문...
transaction.commit();
} catch (Exception e) {
transaction.rollback();
e.printStackTrace();
} finally {
transaction.end();
}
댓글
댓글 쓰기