aop마무리, 트랜잭션 개념 및 설정

Hwawon_2·2022년 5월 2일
0

SampleServiceTests.java

작성하고 실행해보면

123+456을 먼저 계산하기 전, 먼저 ====== 라고 로깅부터 하느것을 볼 수 있습니다.

== 파라미터 넣는 방법==
이번에는 execute 구문에 args를 이용해 파라미터를 추적해 보겠습니다.
분명히 로깅자체는 마음에 들지만, 파라미터별로 무슨 값을 받았는지 알 수 있다면 더 좋기 때문에 LogAdvice에 추가호 위와같이 메서드를 추가합니다.
(접근 제한자 모두 허용
com.ict.service.SampleService로 시작하는 모든 클래스 doAdd(String.string)인 메서드 타겟이며 파라미터는 각각 str1, str2로 명명)

메서드명이 doAdd여야 실행하겠고
파라미터 이름은 String1 String2이어야 한다.

옆에 저 화살표가 떠야 되고 갖다되면 어디에 적용되는지 알 수 있다.
실행 하면

BeFore === 이게 먼저 나오고
str1 에는 123
str2 에는 456이 들어오는걸 확인 할 수 있다.

Advice는 한 메서드에 2개 이상도 동시에 적용받을 수 있기 때문에
테스트 코드를 실행하면 이번에는 2개가 모두 실행됩니다.
둘다 @Before이기 때문에 원본 메서드 이전에 작성된 순서대로 실행 후 핵심로직이 실행 됩니다.

다음은 에외가 발생했을때만 작동하는 @AfterThrowing 을 추가해보겠습니다.
LogAdvice 내부에 작성해줍니다.

SampleServiceTests에서는 일부러 에러를 발생시켜보겠습니다.

실행했을때

빨간불이 나오면서 에러가 뭐였는지 로깅을 해줍니다.
제대로 맞게 넣으면

실행하면

예외가 안나오는걸 확인할 수 있습니다.

@Around는 메서드 실행 내내 실행되는 특이한 경우입니다.
특히, @Around와 함께 사용하는 ProceedingJoinPoint객체를 활용하면 파라미터와 예외 등등을 한 번에 처리할 수 있습니다.
(메서드의 실행요소 시간을 구하는 Advice 입니다)

LogAdvice.java

실행 해보면

==============

스프링의 AOP와 트랜잭션

AOP를 응용해 트랜잭션을 이해하고 적용해 보겠습니다.
먼저 트랜잭션은 2개이상의 쿼리문이 실행된다면 전부 실행되고 실패한다면 전부 실패하게 만드는 것을 의미합니다.

4가지 원칙에 따라 기능을 묶어주는것을 트랜잭션이라고 합니다.

트랜잭션 실습을 위해 pox.xml에 라이브러리를 추가해줍니다.
prj-aop프로젝트
spring-jdbc 5.0.7버전
spring-tx 5.0.7버전
HikariCP 4.0.3버전
log4jdbc-log4j2-jdbc4 1.16버전
mybatis 3.5.6 버전
Spring bridge f 2.0.6 버전
ojdbc8 추가

src/main/resources 내부에 log4jdbc.log4j2.properties파일 추가


root-context.xml을 열고 Namespace탭에 tx를 체크해줍니다.

com.ict.dao패키지 내부에
OracleConnectionPoolTest.java를 생성해 테스트를 코드를 실행해줍니다 .



연결 성공!

root-context.xml 내부에 트랜잭션 실행을 위한
transactionManager객체 생성과 annotation-driven 태그 작성 쿼리문을 입력한 마이바티스 매퍼를 스캔합니다.

profile
코딩 일기장

0개의 댓글