Christmas Pikachu Spring application.xml 트랜잭션 적용
개발일지/스프링

Spring application.xml 트랜잭션 적용

ZI_CO 2024. 3. 4.

application.xml

<?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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.2.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">

	<context:component-scan
		base-package="com.spring.biz" />

	<aop:aspectj-autoproxy /> <!-- 어노테이션을 사용하기 위해 선언함 -->

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/test" />
		<property name="username" value="root" />
		<property name="password" value="1234" />
	</bean>
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource" />
	</bean>
	
	     
   <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="*" />
         <tx:method name="select*" read-only="true" />
      </tx:attributes>
   </tx:advice>
   
   <aop:config>
      <aop:pointcut id="aPointcut" expression="execution(* com.spring.biz..*Impl.*(..))" />
      
      <aop:advisor pointcut-ref="aPointcut" advice-ref="txAdvice" />
   </aop:config>
  

	<!-- <bean class="com.spring.biz.common.LogAdvice" id="logAdvice" /> <bean 
		class="com.spring.biz.common.AfterReturningAdvice" id="ara" /> <bean class="com.spring.biz.common.AfterThrowingAdvice" 
		id="ata" /> <bean class="com.spring.biz.common.AroundAdvice" id="aa" /> <aop:config> 
		<aop:pointcut id="aPointcut" expression="execution(* com.spring.biz..*Impl.*(..))" 
		/> <aop:pointcut id="bPointcut" expression="execution(* com.spring.biz..*Impl.select*(..))" 
		/> <aop:aspect ref="aa"> <aop:around pointcut-ref="aPointcut" method="aroundPrintLog" 
		/> </aop:aspect> <aop:aspect ref="ara"> <aop:after-returning pointcut-ref="bPointcut" 
		method="afterReturningPrintLog" /> </aop:aspect> <aop:aspect ref="ata"> <aop:after-throwing 
		pointcut-ref="aPointcut" method="printException" /> </aop:aspect> </aop:config> -->

</beans>

 

 

 

스프링 AOP 트랜잭션 관리 예시 상세 설명
1. 트랜잭션 매니저 빈 설정:

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean>

 

빈 정의: txManager라는 이름의 스프링 빈을 정의합니다.
빈 클래스: DataSourceTransactionManager 클래스를 사용합니다. 이 클래스는 데이터베이스 트랜잭션 관리를 담당합니다.
데이터 소스 종속성 : dataSource 속성은 다른 빈 (dataSource)을 참조합니다. 이 dataSource 빈은 데이터베이스 연결 정보를 제공합니다.

 

 

2. 트랜잭션 어드바이스 설정:

<tx:advice id="txAdvice" transaction-manager="txManager">
  <tx:attributes>
    <tx:method name="*" />
    <tx:method name="select*" read-only="true" />
  </tx:attributes>
</tx:advice>

 

어드바이스 정의 : txAdvice라는 AOP 어드바이스 빈을 정의합니다.
트랜잭션 매니저 : transaction-manager 속성은 txManager 빈을 참조하여 트랜잭션 관리 기능을 연결합니다.
트랜잭션 속성 : tx:attributes 요소는 메서드에 대한 트랜잭션 동작을 정의합니다.
<tx:method name="*"> : 모든 메서드에 트랜잭션을 적용합니다.
<tx:method name="select*" read-only="true"> : "select*"로 시작하는 메서드에 읽기 전용 트랜잭션을 적용합니다. 읽기 전용 트랜잭션은 데이터베이스 커밋 로직을 필요로 하지 않기 때문에 성능을 향상시킵니다.

 

3. AOP 설정:

<aop:config>
  <aop:pointcut id="aPointcut" expression="execution(* com.spring.biz..*Impl.*(..))" />
  
  <aop:advisor pointcut-ref="aPointcut" advice-ref="txAdvice" />
</aop:config>

 

AOP 설정: 이 섹션은 애플리케이션에서 AOP 기능을 활성화합니다.
포인트컷 정의: aop:pointcut 요소는 표현식을 사용하여 aPointcut이라는 포인트컷을 정의합니다. 이 표현식은 어드바이스를 적용할 메서드를 지정합니다.
execution(* cohttp://m.spring.biz..*Impl.*(..)) : com.spring.biz 패키지 (및 하위 패키지) 내에서 "Impl"로 끝나고 임의의 개수의 인수를 가진 모든 메서드를 대상으로 합니다.
어드바이저 설정 : aop:advisor 요소는 txAdvice를 aPointcut와 연결합니다. 이것은 포인트컷 표현식에 의해 매칭되는 메서드에 트랜잭션을 적용하는 효과를 가져옵니다.

 

 

결론:

이 설정은 스프링 AOP를 사용하여 데이터베이스 트랜잭션을 관리합니다.

txManager 빈은 트랜잭션 로직을 처리하고 txAdvice 빈은 특정 메서드에 대한 트랜잭션 동작을 정의합니다.

마지막으로 aop:config 섹션은 이 두 가지를 연결하여 포인트컷 표현식에 의해 선택된 메서드에 트랜잭션을 적용합니다.

댓글