본문 바로가기

Spring

Spring(14) - 데이터베이스 연동(JDBC), 트랜잭션

스프링에서 데이터베이스와 연동하는 방법은 DataSource방식을 사용하는 것이다. 스프링이 지원하는 JPA/하이버네이트/Mybatis를 사용할 경우에 데이터베이스 연결을 위해 DataSource를 설정해주어야한다. 스프링은 다음과 같은 3가지 방식의 DataSource설정을 지원하고있다.

  • 커넥션풀을 이용한 DataSource설정
  • JNDI를 이용한 DataSource설정
  • DriverManager를 이용한 DataSource설정(테스트 목적)

1. 커넥션풀을 이용한 DataSource설정

스프링은 커넥션풀 구현 클래스를 직접 제공해 주지않아서 maven의존을 통해 c3p0같은 커넥션 풀 라이브러리를 추가해 주어야한다.

 <bean id = "dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    	<property name = "driverClass" value = "oracle.jdbc.driver.OracleDriver"/>
    	<property name = "jdbcUrl" value = "주소"/>
    	<property name = "user" value = "oracle"/>
    	<property name = "password" value = "oracle"/>
 </bean>

의존설정 후 위와같이 스프링설정파일에 dataSource빈을 추가한다.

2. DriverManger를 이용한 DataSrouce설정

로컬(테스트)용으로 DB를 사용할 경우 DriverManger를 사용하면 된다.

<bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverMangerDataSource">
  		<property name = "driverClassName" value = "oracle.jdbc.driver.OracleDriver"/>
  		<property name = "url" value = "주소/>
  		<property name = "username" value = "oracle"/>
  		<property name = "password" value = "oracle"/>
</bean>

3. 선언적 트랜잭션 처리

  • <tx:advice>태그를 이용한 트랜잭션처리
<bean id = "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager">
   	<property name = "dataSource" ref = "dataSource"></property>
</bean>     
<tx:advice id = "txAdivce" transaction-manager = "transactionManager">
    	<tx:attributes>
    		<tx:method name="order" propagation = "REQUIRED"/>
    		<tx:method name="get*" read-only = "true"/>
    	</tx:attributes>
</tx:advice>

위는실제로 사용되는 트랜잭션이 아닌 선언만 해놓은 것이고 aop와 연동해서 사용할 수 있다.

<aop:config>
    <aop:pointcut id = "publicMethod" expression = "excution(public * ...)"/>
    <aop:advisor advice-ref = "txAdvice" pointcut-ref = "publicMethod"/>
</aop:config>
  • @Transactional 애노테이션을 이용한 트랜잭션처리

Transactional애노테이션은 메서드위에 @Transactional 설정을 통해 사용할 수 있다. 애노테이션을 사용하려면 스프링 xml설정파일에 <tx:annotaion-driven/>을 설정해주어야한다.

@Controller
    public class ex{
    	@Transactional(propagation = REQUIRED)
    	public void transactionEx(){
        
        }
    }

 

'Spring' 카테고리의 다른 글

Spring(16) - Mybatis연동  (0) 2019.04.18
Spring(15) - JPA, ORM, Hibernate, Mybatis  (0) 2019.04.18
Spring(13) - WebSocket  (0) 2019.04.16
Spring(12) - 파일업로드  (0) 2019.04.16
Spring(11) - XML/JSON, @RequestBody, @ResponseBody  (0) 2019.04.16