Spring Maven 프로젝트 만들기 - 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();
}

}

4. root-context.xml 에 아래 코드 삽입

    <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();

}

댓글