메소드에서 2개 이상의 Transaction이 일어날수 있다(게시판 테이블에 내용기록후 파일 테이블에 첨부파일 내용 기록시). 데이터베이스의 ACID 에서 원자성을 유지할수 있는방법이다. 물론 정상적인 상황에서 이러한일이 많이 일어나진 않겠지만.  만일이라는게 있다. SimpleJdbcTemplate 를 기준으로 작성하였다.

 

클래스를 사용하기 위해 xml 을 편집한다.

	<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>	
	</bean>

 

사용하고자 하는 Dao Class 에 대해 Property 를 set 해준다.

		<property name="transactionManager" ref="transactionManager"></property>

 

 

사용하자고 하는 Dao class 에 TransactionManager 를 멤버변수로 선언후 setter 를 생성해준다

	private PlatformTransactionManager transactionManager;
	public void setTransactionManager(PlatformTransactionManager transactionManager) {
		this.transactionManager = transactionManager;
	}

 

 

실제 처리가 이루어지는 로직에 다음과 같이 코딩한다. 기본트랜잭션 정의를 로드하여 사용하였다..

		TransactionDefinition def = new DefaultTransactionDefinition();
		TransactionStatus status = transactionManager.getTransaction(def);
		try {
			getSimpleJdbcTemplate().update(1번 sql);
			getSimpleJdbcTemplate().update(2번 sql);
			transactionManager.commit(status);
			System.out.println("트랜잭션 완료");
		}
		catch(DataAccessException ex){
			transactionManager.rollback(status);
			System.out.println("롤백 됨");
		}