반응형
전자정부에서 context-transactional.xml
파일이 있어
이를 통해 transaction 설정했으나 @Transactional
안붙여도 어떤 메소드든
Exception
만 발생하면 트랜잭션이 발생하는 문제 발생
특정 메소드에서는 예외처리 발생시 DB 에 오류 발생 여부를 업데이트 해야하는 상황이었음
이거 해결한 방법 정리
1. 전자정부 트랜잭션 기본설정 (모든 예외에 대해)
기본적으로 생성되는 아래 파일에 expression 경로만 본인 프로젝트로 바꿔주고 이름 맞춰주면 끝
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="requiredTx" expression="execution(* project..impl.*Impl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />
</aop:config>
</beans>
2. 특정 메소드에 대해서만 예외처리 트랜잭션 해제하기
and !execution
으로 원하는 메소드 경로를 입력해주면 해당 메소드는 exception 발생해도 트랜잭션 미발동
<aop:pointcut id="requiredTx" expression="execution(* project.service..impl.*Impl.*(..))
and !execution(* project.service..impl.*Impl.uploadImgFile(..))"/>
3. 트랜잭션 어노테이션으로 트랜잭션 가능하게 설정하기
xml 에서 기존 tx:advice
와 aop:config
주석처리 후 tx:annotation-driven
추가하면@Transactional
붙인 메소드에서만 트랜잭션 적용됨
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
<!-- <tx:advice id="txAdvice" transaction-manager="txManager">-->
<!-- <tx:attributes>-->
<!-- <tx:method name="*" rollback-for="Exception"/>-->
<!-- </tx:attributes>-->
<!-- </tx:advice>-->
<!-- <aop:config>-->
<!-- <aop:pointcut id="requiredTx" expression="execution(* gbai.service..impl.*Impl.*(..))"/>-->
<!-- <aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />-->
<!-- </aop:config>-->
</beans>
반응형
'Spring > Spring (Legacy)' 카테고리의 다른 글
스프링 파일다운로드 OCTET 인식불가 오류 (3) | 2024.11.11 |
---|---|
[전자정부] RestController / ResponseBody 응답 404 일때 (0) | 2024.10.22 |
스프링 스케쥴링 사용법 (0) | 2024.08.19 |
마이바티스 result 로 vo 2개 설정하기 (0) | 2024.07.10 |
[전자정부 Egov] Swagger 적용방법(스프링 레거시) (1) | 2024.05.28 |