[Spring] Transaction Manager 을 이용한 원자성유지
메소드에서 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("롤백 됨"); }
댓글
이 글 공유하기
다른 글
-
[Spring] Tiles Library 사용하기
[Spring] Tiles Library 사용하기
2014.08.03 -
[Spring] JDBC template
[Spring] JDBC template
2014.07.29DAO 작업을 하면서 지겨운 getter, setter 작업때문에 질려버린적이 있다. Spring 에서는 이러한 작업을 자동화 및 소스 코드를 상당히 줄여준다. 이 포스팅에선 실제적인 Mapper 사용까지는 올리지 않았다. 단순히 Mapper 를사용하기 위한 xml 설정만 포스팅한다. 기존의 데이터베이스정보에 관련된 datasource를 주입식으로 작업한다. Oracle 기준으로 작성하였다. mysql 은 그에 대한 driverClassName 과 url 만 바꿔 주면된다. dispatcher-servlet.xml 를편집해준다. 그다음 template 를 사용하는 DAO 객체에 setter 를 해주는 코드를 멤버변수로 작성해준다. private JdbcTemplate template; public voi… -
[Spring] 인코딩(UTF-8) 필터 클래스 장착하기
[Spring] 인코딩(UTF-8) 필터 클래스 장착하기
2014.07.29 -
[Spring] Annotation 을 이용한 컨트롤러 맵핑
[Spring] Annotation 을 이용한 컨트롤러 맵핑
2014.07.29web.xml 에서 url Mapping 을 위해 web.xml 에서 해당되는 확장자가 들어올시 Spring 의 Dispatcher 를 실행시키게끔 편집한다. dispatcher org.springframework.web.servlet.DispatcherServlet dispatcher *.htm 그다음 dispatcher-servlet.xml 을 편집해준다. 컨트롤러의 위치를 찾아주는 component-scan 의 위치를 지정해준다. 패키지명만 적어준다. 그후 베이스 패키지명과 같은 이름으로 패키지를 만들어주고 그안에 컨트롤러 클래스를 만들어준다. 컨트롤러 클래스의 이름은 아무것이나 지어도 된다. 편의상 PracticeController 이라 하겠다. package controllers; import …
댓글을 사용할 수 없습니다.