[B -2-4] 스프링과 오라클 데이터베이스의 연동

2019. 9. 28. 19:37Project B (SPMS)/Project B 파트1

반응형

오라클 유저 study2 생성 및 DBA권한 부여

 

SQL PLUS 관리자로 접속 후

sqlplus / as sysdba

오라클 유저 생성

create user study2 identified by study2 
default tablespace users 
temporary tablespace temp;

유저에 DBA 권한 부여

GRANT CONNECT, DBA TO STUDY2

오라클 study2 유저로 접속 테스트 확인

study2 오라클 유저 접속 확인

 


오라클 자바 연결 드라이버 (ojdbc 8) 라이브러리 추가 1

프로젝트 속성(Properties) 에서 Java Build Path - Libraries - Add External JARs 

파일 : SQL Developer의 sqldeveloper\jdbc\lib\ojdbc8.jar 의 파일을 추가

Java Build Path : ojdbc8.jar 추가

 


오라클 자바 연결 드라이버 (ojdbc 8) 라이브러리 추가 2

프로젝트 속성(Properties) 에서 Deployment Assembly - Add - Java - Build Path Entries

파일 : SQL Developer의 sqldeveloper\jdbc\lib\ojdbc8.jar 의 파일을 추가

Deployment Assembly : ojdbc8.jar 추가
Deployment Assembly : ojdbc8.jar 추가


 

오라클 자바 연결 드라이버 (ojdbc 8) 라이브러리 추가 3

파일 복사 : SQL Developer의 sqldeveloper\jdbc\lib\ojdbc8.jar

파일 붙여넣기 : webapp/WEB-INF/lib/ojdbc8.jar 

(*) lib 폴더는 생성할 것.

lib 폴더에 ojdbc8.jar 추가


JDBC 테스트 코드 작성

 

src/test/java

com.spms.persistence

JDBCTests.java

더보기
package com.spms.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:@호스트주소:1521:SID", "아이디",
				"패스워드")) {
			log.info(con);
		} catch (Exception e) {
			fail(e.getMessage());
		}
	}

}

JDBC 테스트 코드 실행

Run As - JUnit Test


JDBC 테스트 코드 실행 테스트 결과

INFO : com.spms.persistence.JDBCTests - oracle.jdbc.driver.T4CConnection@8bd1b6a

 


커넥션 풀 설정

 

src/main/java

com.spms.config

RootConfig.java

더보기
package com.spms.config;

import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration
public class RootConfig {
	
	@Bean
	public DataSource dataSource() {
		HikariConfig hikariConfig = new HikariConfig();
		hikariConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
		hikariConfig.setJdbcUrl("jdbc:oracle:thin:@본인의 호스트주소:본인의 포트번호:본인의 환경SID");
		hikariConfig.setUsername("아이디");
		hikariConfig.setPassword("패스워드");
		HikariDataSource dataSource = new HikariDataSource(hikariConfig);
		return dataSource;
	}
}

@Bean : XML의 <Bean> 과 같으며, @Bean이 선언된 메서드의 실행결과로 반환된 객체는 스프링 객체(Bean)로 등록된다.

Bean을 정의한 후에는 항상 테스트를 작성하는 습관을 가져야 한다.


커넥션 풀 테스트 작성

 

src/test/java

com.spms.persistence

DataSourceTests.java

 

더보기
package com.spms.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 com.spms.config.RootConfig;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes= {RootConfig.class})
@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)으로 등록된 데이터소스(DataSource)를 이용해서 연결(Connection)을 제대로 처리할 수 있는지 확인


커넥션 풀 JUnit 테스트 결과

(*) JUnit 테스트 방법은 이제부터 생략.

더보기
INFO : org.springframework.test.context.support.DefaultTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
INFO : org.springframework.test.context.support.DefaultTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@7d9d1a19, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@39c0f4a, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@1794d431, org.springframework.test.context.support.DirtiesContextTestExecutionListener@42e26948, org.springframework.test.context.transaction.TransactionalTestExecutionListener@57baeedf, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@343f4d3d]
INFO : org.springframework.context.support.GenericApplicationContext - Refreshing org.springframework.context.support.GenericApplicationContext@5f9d02cb: startup date [Sat Sep 28 19:59:49 JST 2019]; root of context hierarchy
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
WARN : com.zaxxer.hikari.util.DriverDataSource - Registered driver with driverClassName=oracle.jdbc.driver.OracleDriver was not found, trying direct instantiation.
INFO : com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
INFO : com.spms.persistence.DataSourceTests - HikariProxyConnection@1052317717 wrapping oracle.jdbc.driver.T4CConnection@60015ef5
INFO : org.springframework.context.support.GenericApplicationContext - Closing org.springframework.context.support.GenericApplicationContext@5f9d02cb: startup date [Sat Sep 28 19:59:49 JST 2019]; root of context hierarchy
INFO : com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
INFO : com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.

 

유닛 테스트를 해보면, 내부적으로 HikariCP가 시작되고, 종료되는 로그를 확인할 수 있다.

 


 

반응형