-
Transaction / AOPJava/Spring 2018. 8. 27. 17:13반응형
Transaction - 데이터 처리
정상적으로 데이터가 처리 되면 Commit - 유지
Error가 발생되면 Rollback - 취소AOP - 공통코드를 동작시키위한 기술
Aspect Oriented Programming - 관점 지향 프로그래밍
Spring AOP로 Transaction을 처리한다.
weaving - Compile된 여러개의 .class 파일을 하나의 클래스로 묶어서 처리하는 기술
마치 하나의 코드처럼 움직인다.
Service Logic / Business Logic 실행 시 Exception이 발생할 때, DataBase에 변경 사항 RollBack이 필요하다.
AOP는 Point-cut과 Advisor로 구성되어 동작한다.
Point-cut : 특정 패키지, 클래스, 메소드 지정
Advisor : 특정 상황 지정
* 특정 상황
before - method나 class 실행 전
after - 실행 후 ( 예외발생하던, 정상처리되던 )
after-throwing - 예외 발생시
after-returning - 정상 처리시
around - 모든 범위
Transaction, Logging 등 다양하게 사용된다.
spring-aop라는 dependency는 이미 존재한다.
추가로 org.aspectj의 aspectjweaver dependency를 추가한다.
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.1</version></dependency>rootContext.xml -> NameSpaces -> tx, aop를 체크한다.
상황에 따라 Rollback, Commit을 수행할 Transaction Manager를 설정한다.
* rootContext.xml
<!-- 공통기능 Rollback, Commit 빈 생성 --> , After-throwing 기준<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- Rollback, Commit 대상 메소드 지정 --><tx:advice id="transactionAdvisor" transaction-manager="transactionManager"><tx:attributes><tx:method name="read*" read-only="true" /> -> fine* Method에서 Error가 실행되는 Method는 rollback한--> 읽기전용, SQL Injection을 방지하기위해 데이터에 안전하게 접근한다.<tx:method name="create*" rollback-for="RuntimeException" /> -> RunTimeException 발생시 rollback<tx:method name="regist*" rollback-for="RuntimeException" /><tx:method name="update*" rollback-for="RuntimeException" /><tx:method name="delete*" rollback-for="RuntimeException" /></tx:attributes></tx:advice><!-- Transaction( Commit, Rollback ) 대상 클래스 지정 --><aop:config>- 패지키명 앞에 띠어쓰기 꼭 해야된다.<aop:pointcut expression="execution( * com.ktds..service.*ServiceImpl.*(..) )"id="transactionPointcut"/><aop:advisor advice-ref="transactionAdvisor"pointcut-ref="transactionPointcut" /> point-cut이나 advisor는 한개의 method만 지정가능하다.</aop:config>@Contoroller에는 Transaction이 적용되지 않는다.
BoardServiceImpl에서 강제로 예외를 발생 시켜서 Rollback이 되는지 테스트한다.
@Overridepublic boolean createBoard(BoardVO boardVO, MemberVO memberVO) {// 업로드를 했다면boolean isUploadFile = boardVO.getOriginFileName() != null;int point = 10;if ( isUploadFile ) {point += 10;}// MemberVO loginMemberVO = memberDao.selectOneMember(memberVO);// dbthis.memberDao.updatePoint(memberVO.getEmail(), point);// sessionint memberPoint = memberVO.getPoint();memberPoint += point;memberVO.setPoint(point);예외 발생구간boolean isSuccess = this.boardDao.insertBoard(boardVO) > 0; // -> RollbackInteger.parseInt("ABC"); // NumberFormatException, -> Rollbackreturn this.boardDao.insertBoard(boardVO) > 0;}반응형'Java > Spring' 카테고리의 다른 글
Spring Problem - class="org.mybatis.spring.SqlSessionTemplate" not found (0) 2018.08.29 Error - configuring application listener of class org.springframework.web.context.ContextLoaderListener (0) 2018.08.29 Logging (0) 2018.08.27 Static Resources (0) 2018.08.24 Interceptor (0) 2018.08.24 댓글