트랜잭션은 꼭 개발시에 관리를 해주어야 하는데요.
트랜잭션을 한방에 처리 할수있는 aop방식이 있습니다.
aop 방식은 한방에 모든 파일을 관리를 하도록 하는 방식인데 많이 사용되는 방식입니다.
먼저 config파일을 만들어 주어야 합니다. TransactionAspect.java라는 파일을 만들어 보겠습니다.
TransactionAspect.java
import java.util.Collections;
import java.util.HashMap;
import org.springframework.aop.Advisor;
import org.springframework.aop.aspectj.AspectJExpressionPointcut;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource;
import org.springframework.transaction.interceptor.RollbackRuleAttribute;
import org.springframework.transaction.interceptor.RuleBasedTransactionAttribute;
import org.springframework.transaction.interceptor.TransactionAttribute;
import org.springframework.transaction.interceptor.TransactionInterceptor;
@Configuration
public class TransactionAspect {
@Autowired
PlatformTransactionManager transactionManager;
@Bean
public TransactionInterceptor transactionAdvice() {
NameMatchTransactionAttributeSource txAttributeSource = new NameMatchTransactionAttributeSource();
RuleBasedTransactionAttribute txAttribute = new RuleBasedTransactionAttribute();
txAttribute.setRollbackRules(Collections.singletonList(new RollbackRuleAttribute(Exception.class)));
txAttribute.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
HashMap<String, TransactionAttribute> txMethods = new HashMap<String, TransactionAttribute>();
txMethods.put("*", txAttribute);
txAttributeSource.setNameMap(txMethods);
return new TransactionInterceptor(transactionManager, txAttributeSource);
}
@Bean
public Advisor transactionAdviceAdvisor() {
AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
pointcut.setExpression("execution(* 전체패키지명..service.impl.*Impl.*(..))");
return new DefaultPointcutAdvisor(pointcut, transactionAdvice());
}
}
위에거 대로 작성을 하면 service.impl 패키지 안에 Impl로 끝나는 자바의 모든 파일의 메소드에 트랜잭션을 거는 것입니다. 이렇게 한방에 트랜잭션을 걸수 있는 방법이 있습니다. 이게 aop 방식 인거죠
execution(* 전체패키지명..service.impl.*Impl.*(..)) 이렇게하면 전체패키지 안에 Impl로 끝나는 모든메소드에 트랜잭션을
건다는 겁니다.
'IT, 인터넷 > JAVA, 스프링부트' 카테고리의 다른 글
이클립스에서 일반 자바프로젝트 생성후에 자바 파일 만들기 (0) | 2021.09.15 |
---|---|
스프링부트 + jsp + yml로 게시판 만들기 - (2) 게시판 만들기 (0) | 2021.09.14 |
스프링부트 + jsp + yml로 게시판 만들기 - (1) 개발환경 설정 (0) | 2021.09.14 |
스프링부트 yml, properties 암호화 하기 (0) | 2021.09.02 |
스프링, 스프링부트 resttemplate 사용하기 (외부와 연결하는 restapi) (0) | 2021.09.02 |