ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [기능구현#6] DataSource
    프로젝트/게시판 프로젝트 2024. 11. 20. 22:24

    DataSource 란?

    DataSource는 JDBC를 이용하여 DB를 연결시에 도와주는 객체이다.
    DataSource는 DB연동을 위한 작업을 중간에서 도와주며, Connection Pool를 이용하여 커넥션 관리를 용이하게 도와준다.
    DataSourceUtils를 이용하면, 커넥션의 반환도 관리할 수 있어서 트랜잭션을 시행할때 많은 도움을 받을 수 있다/

    현재 프로젝트에 적용되어있으며, h2DataBase의 드라이버를 사용하지 않고도 DataSource를 이용하여 손쉽게 연결하며 ConnectionPool도 구성할 수 있었다.

     

    DataSource 구현

    • DataSource Config
      • DataSource는 인터페이스이고, Hikari를 이용하여 구현체를 사용
    public class DataSourceConfig {
    
        public static DataSource dataSource(){
            HikariConfig config = new HikariConfig();
    
            config.setJdbcUrl(ConnectionConst.URL);
            config.setUsername(ConnectionConst.USERNAME);
            config.setPassword(ConnectionConst.PASSWORD);
    
            config.setMaximumPoolSize(10);
            config.setMinimumIdle(5);
            config.setIdleTimeout(600000);
            config.setConnectionTimeout(30000);
            config.setMaxLifetime(1800000);
            config.setConnectionTestQuery("select 1");
    
            return new HikariDataSource(config);
        }
    }
    • AppConfig (@Configuration)
      • 수동으로 bean을 등록하여,  생성자 주입을 해주었다
    //@Configuration
    @Bean
        public BoardRepository boardRepository() {
             return new BoardDBRepository(DataSourceConfig.dataSource());
        }
        
     
     //BoardDBRepository.class
     public BoardDBRepository(DataSource dataSource){
            this.dataSource = dataSource;
            this.excep = new SQLErrorCodeSQLExceptionTranslator(dataSource);
        }

     

    • DataSourceUtils를 사용
      • 트랜잭션을 위한 커넥션 유지
    private void close(Connection con, Statement stmt, ResultSet rs){
            JdbcUtils.closeResultSet(rs);
            JdbcUtils.closeStatement(stmt);
            DataSourceUtils.releaseConnection(con, dataSource);
        }

     

    DataSource 장점

    • DataSource를 통해서 Driver 없이 DB와 connect 작업을 수월하게 할 수 있었다
    • DataSource를 통해서 커넥션 유지하여, 트랜잭션이 원활하게 돌아가도록 제공
    • DataSource를 통해서 커넥션 풀을 유지하며, connection을 매번 맺는 리소스를 절약할 수 있었다.
Designed by Tistory.