[ex00 , jex00 공통부분]
프로젝트 한번 클릭후 alt+enter 로 build path
add external jar
ojdb8.jar를 추가해준다.
deployment assembly로 add build path 클릭후 ojdbc8추가
JDBC 테스트 코드
org.zerock.persistence패키지에 JDBCTests클래스를 추가
package org.zerock.persistence;
import static org.junit.Assert.fail;
import java.sql.Connection;
import java.sql.DriverManager;
import org.junit.Test;
import lombok.extern.log4j.Log4j;
@Log4j
public class JDBCTests {
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testConnection() {
try(Connection con =
DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:XE",
"book_ex",
"book_ex")) {
log.info(con);
} catch (Exception e) {
fail(e.getMessage());
}
}
}
만약 jex프로젝트 실행시 에러가 난다면 ojdbc8 jar를 확인해 주자
커넥션 풀 설정
여러명의 사용자를 동시에 처리해야 하는 웹 어플리케이션의경우 데이터베이스 연결을 이용할때 커넥션풀(Connection pool)을 이용한다.
커넥션풀은 여러종류가 있고, 이 책에서는 HikariCp를 이용한다.
[ex00]
pom.xml에 아래의코드를 추가해준다.
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.4</version>
</dependency>
root-context.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:XE"></property>
<property name="username" value="book_ex"></property>
<property name="password" value="book_ex"></property>
</bean>
<!-- HikariCp Configuration -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig"/>
</bean>
<context:component-scan base-package="org.zerock.sample">
</context:component-scan>
</beans>
XML 설정 방식을 알아보았으니 이제 Java 설정방식을 알아보자
[jex00]
Java설정을 이용하는 경우 RootConfig 클래스와 @Bean을 이용해서 처리한다.
@Bean은 XML 설정에서 <bean> 태그와 동일한 역할을 한다.
@Bean이 설정된 메서드의 실행결과로 반환된 객체는 스프링의 객체<Bean>로 등록된다.
package org.zerock.config;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration
@ComponentScan(basePackages = {"org.zerock.sample"})
public class RootConfig {
@Bean
public DataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
hikariConfig.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:XE");
hikariConfig.setUsername("book_ex");
hikariConfig.setPassword("book_ex");
HikariDataSource dataSource = new HikariDataSource(hikariConfig);
return dataSource;
}
}
스프링이 시작되면 root-context.xml 을 읽어서 아래와 같은 형태로 id가 dataSource인 객체로 처리된다.
[ex00]
package org.zerock.persistence;
import static org.junit.Assert.fail;
import java.sql.Connection;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class DataSourceTests {
@Setter(onMethod_= { @Autowired} )
private DataSource dataSource;
@Test
public void testConnection() {
try (Connection con = dataSource.getConnection()) {
log.info(con);
} catch (Exception e) {
fail(e.getMessage());
}
}
}
-> 테스트코드는 스프링에 bean으로 등록된 DataSoure를 이용 Connection 을 제대로 처리 할 수 있는지 확인해 보는 용도
testConnection()을 실행해 보면 내부적으로 HikariCP가 시작되고 종료되는 로그 확인가능
[jex00]
package zerock.persistence;
import static org.junit.Assert.fail;
import java.sql.Connection;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.zerock.config.RootConfig;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes= {RootConfig.class}) //Java설정을 이용하는경우
@Log4j
public class DataSourceTests {
@Setter(onMethod_ = { @Autowired })
private DataSource dataSource;
@Test
public void testConnection() {
try (Connection con = dataSource.getConnection()){
log.info(con);
} catch (Exception e) {
fail(e.getMessage());
}
}
}
'web' 카테고리의 다른 글
코드로 배우는 스프링 웹프로젝트 - 스프링과의 연동처리 (0) | 2020.09.30 |
---|---|
코드로 배우는 스프링 웹프로젝트 - 04 MyBatis와 스프링 연동 (0) | 2020.09.30 |
코드로 배우는 스프링웹프로젝트 - 스프링과 Oracle Database연동 (0) | 2020.09.29 |
코드로 배우는 스프링웹 프로젝트 03 (0) | 2020.09.29 |
코드로 배우는 스프링웹프로젝트 02 (0) | 2020.09.29 |