2017-10-10 1 views
0

연결 풀을 구현합니까? PostgreSQL JDBC 드라이버는 스레드로부터 안전하지만 MYSQL에서는 잘 모르겠습니다.Mysqldatasource 스레드가 안전합니까?

DB 연결을 처리하기위한 정적 객체를 만들고 있습니다. package com.amzi.DataAccess;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; 

public class DBUtil { 
    private static MysqlDataSource dataSource = null; 

    public static MysqlDataSource getDataSource() { 
     if (dataSource == null) { 
      dataSource = new MysqlDataSource(); 
      dataSource.setUser("root"); 
      dataSource.setPassword(""); // Put your password here 
      dataSource.setUrl("jdbc:mysql://localhost:3306/user_device_table"); 
     } 
     return dataSource; 
    } 
} 

그리고 또 다른 클래스에서는 레코드가 있는지 확인하기 위해 연결을 만듭니다. 연결이 완료되면 닫습니다.

public boolean ValidateLogin(User user) { 
    boolean status = false; 
    PreparedStatement ps = null; 
    ResultSet rs = null; 
    Connection connection = null; 

    try { 
     connection = DBUtil.getDataSource().getConnection(); 
     ps = connection.prepareStatement("select * from users where user_name=? and password=?"); 
     ps.setString(1, user.getUsername()); 
     ps.setString(2, user.getPassword()); 
     rs = ps.executeQuery(); 
     status = rs.next(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } finally { 
     try { 
      connection.close(); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    return status; 
} 
+0

대부분의 경우 (이전 버전의 Tomcat을 사용하지 않는 경우) 데이터 소스 설정을 위해 응용 프로그램 서버의 구성을 사용해야합니다. 이것은 항상 연결 풀 구성을 수반합니다. –

+0

@SteveC는 연결 풀이 필요합니까? 내가 3 개의 다른 랩톱을 모두 localhost에서 실행 중이지만 모두 동일한 원격 db에 연결되어 있다고 가정 해보십시오. 이 경우 수영장이 필요합니까? –

+0

10, 100 또는 1000 명의 사용자가있을 수 있도록 확장해야하는 경우 연결 풀을 사용하면 많은 도움이됩니다. –

답변

0

com.mysql.jdbc.jdbc2.optional.MysqlDataSource은 기본적인 데이터 소스입니다. 즉, 연결을 작성하지만 연결 풀을 제공하지 않습니다.

연결 생성은 DriverManager.getConnection처럼 기본 MySQL java.sql.Driver 구현을 사용합니다. 즉, 드라이버 자체와 마찬가지로 스레드로부터 안전합니다.

일반적으로 연결 풀을 사용하는 것이 좋습니다. 응용 프로그램/서버 (또는 Tomcat)에서 제공하는 기능을 사용하거나 전용 연결 풀 라이브러리 (예 : HikariCP, DBCP 등)를 사용하십시오.

+0

무슨 뜻입니까? DataSource는 인터페이스입니다 ... MysqlDataSource는 DataSource 구현입니다. 내가 ds.getConnection()을 호출 할 때 MysqlDataSource 유형의 객체 (예 : ds라고 함)를 만들면 연결 풀에서 연결이 생성됩니까? ds.close()를 호출하면 연결이 닫히고 풀로 다시 릴리스됩니까? –

+0

@YusufJama 내 대답을주의 깊게 읽으십시오. 명시 적으로 다음과 같이 설명합니다. _ "연결을 생성하지만 연결 풀을 제공하지 않습니다."_. 따라서 연결 풀을 사용하지 않습니다. 또한 데이터 소스에는'close()'메쏘드가 없지만 연결을 의미한다고 가정하면'MysqlDataSource'에서 직접 얻은 다음 close를 호출하면 물리적 연결이 닫힙니다. –

관련 문제