톰캣 서버에 Datasource 설정하기

삼전·2023년 6월 25일
0

Spring

목록 보기
6/12

1. Datasource란?

참조 블로그

  • DriverManager는 웹 어프리케이션에서 관리

    🚨이렇게 되면 JDBC Driver를 로드하고 커낵션 객체를 받아와야하고 매번 사용자가 요청을 할 때마다 드라이버를 load하고 Connection 객체를 생성 - 연결 - 종료 매우 비효율적
    커넥션 풀을 사용하여 최적화
  • Datasource는 서버에서 DB 커넥션
  • DataSource는 자체적으로 Connection & Stament객체를 Pooling구현:
    Connection Pool이란?

    *출처: 제이온님
  • Tomcat 5.5이후 부터는 META-INF/context.xml 파일을 위치시키면 Tomcat은 구동시 META-INF폴더의 context.xml파일을 찾아 존재할 경우 Servers/Tomcat v9.0~/server.xml 파일의 Host 하위 노드로 추가하여 구동

META-INF폴더의 context.xml

<Context>
	<Resource name="jdbc/ora" 
			auth="Container" 
			type="javax.sql.DataSource" 
			maxTotal="100" 
			maxIdle="30" 
			maxWaitMillis="10000" 
			driverClassName="oracle.jdbc.driver.OracleDriver" 	
			url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
			username="edu" 
			password="1234" /> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

</Context>

pom.xml 필수 dependency 및 properties!

	<properties>
		<java-version>11</java-version>
		<org.springframework-version>5.3.18</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
		<mybatis-version>3.4.6</mybatis-version>
		<mybatis-spring-version>2.0.6</mybatis-spring-version>
		<commons-dbcp-version>1.4</commons-dbcp-version>
	</properties>
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
	<dependency>
		<groupId>commons-dbcp</groupId>
		<artifactId>commons-dbcp</artifactId>
		<version>${commons-dbcp-version}</version>
	</dependency>
    <dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>${org.springframework-version}</version>
		<exclusions>
			<!-- Exclude Commons Logging in favor of SLF4j -->
			<exclusion>
				<groupId>commons-logging</groupId>
				<artifactId>commons-logging</artifactId>
			 </exclusion>
		</exclusions>
	</dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>${mybatis-version}</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>${mybatis-spring-version}</version>
	</dependency>
    <dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-tx</artifactId>
		<version>${org.springframework-version}</version>
	</dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>${org.springframework-version}</version>
	</dependency>
	     
	<!-- https://mvnrepository.com/artifact/org.json/json -->
	<dependency>
	    <groupId>org.json</groupId>
	    <artifactId>json</artifactId>
	    <version>${json-version}</version>
	</dependency>
    

DataSource를 웹 어플리케이션에서 사용하려면

<beans>
	<!-- 📃DOCS: "FactoryBean that looks up a JNDI object"   -->
	<bean id="dataSource"  class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName" value="java:comp/env/jdbc/ora"/>
	</bean>
	
	<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource"         ref="dataSource"/>
		<property name="typeAliasesPackage" value="com.edu.emp.model.dao"/>
		<property name="mapperLocations"    value="classpath:sqlMapper.xml"/>
		<property name="configLocation"     value="classpath:mybatis-config.xml"/>
	</bean>
	
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSessionFactoryBean"/>
	</bean>
	
	<!-- Datasource와 협업  -->
	<bean id="transactionManager" 
		  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<tx:annotation-driven transaction-manager="transactionManager"/>
	
</beans>
profile
풀스택eDot

0개의 댓글