2014-09-05 1 views
0

이전에 여러 개의 연결 풀링 API를 사용했지만 그 자체로 뭔가를 할 시간이 있다고 생각했습니다. Iam은 현재 내가 구축 할 수있는 매우 기본적인 MySQL 연결 풀링 기능을 찾고 있습니다. 너희들이 내게 정직한 의견을 줄 수 있다면 정말로 감사하겠다! 사전에경량 자체 제작 Java MySQL 연결 풀링 - 작동합니까?

package temp.jdbc; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.List; 

public class MySQL { 

    private static final String driver = "com.mysql.jdbc.Driver"; 
    private static final String url = "jdbc:mysql://localhost:3306/beta"; 
    private static final String username = "root"; 
    private static final String password = "mypassword"; 

    private static List<Connection> pool = new ArrayList<Connection>(); 

    public static void setup() { 

     try { 

      for(int i = 0; i < 5; i++) { 
       Class.forName(driver); 
       Connection connection = DriverManager.getConnection(url, username, password); 
       pool.add(connection); 
      } 

     } 
     catch (ClassNotFoundException e) { e.printStackTrace(); } 
     catch (SQLException e) { e.printStackTrace(); } 

    } 

    public static void addConnection(Connection connection) { 
     pool.add(connection); 
    } 

    public static Connection getConnection() { 
     Connection connection = null; 
     if(pool.size() <= 0) return connection; 
     connection = pool.get(0); pool.remove(0); 
     return connection; 
    } 

} 

감사 :

여기에 코드입니다!

감사 Gemaken

연결 풀의 구현 몇 가지 중요한 문제가있다
+0

연결 풀은 최소한 javax.sql.DataSource 인터페이스를 구현해야합니다 (풀을 사용하는 코드는 풀을 사용한다는 것을 모름). 실제로 직접 구현하지 않아야합니다. 정말로 그렇게한다면 C3P0 - http://sourceforge.net/projects/c3p0를보십시오 - 어느 것이 맞습니까? –

+0

빠른 답장을 보내 주셔서 감사합니다! 그 점에 대해 살펴 보겠다.하지만 먼저, 사람들이 왜 그렇게 확신하는지, 사람들이 기존의 연결 풀링 API를 사용해야하는지, 제발 말해 줄 수 있습니까? – Gemaken

+0

대다수의 경우 압연 - 자신의 일은 잘못된 행동입니다. C3P0와 같은 API는 1000 명의 사람들에 의해 사용되어 매우 잘 입증 된 강력한 구현입니다. –

답변

0

- 연결이 풀에 반환되지 않습니다 모든 연결이 사용되는 어떠한 스레드 안전, 아니 차단, 그것은 정적 없습니다

이렇게하면 기본부터 시작하겠습니다.

첫째, 값 비싼 리소스 (이 경우 javax.sql.Connection)를 유지해야하므로 나중에 리소스를 다시 작성하는 비용을 피하면서 재사용 할 수 있습니다.

대부분의 풀에는 최소값과 최대 값이 있습니다. 생성 될 때 풀은 최소 개수의 리소스를 생성하고 리소스가 소비 될 때 최대까지 확장 할 수 있습니다.

리소스가 풀에서 검색 될 때 검색 스레드는 리소스가 풀로 반환 될 때까지 해당 리소스를 독점적으로 사용해야합니다.

모든 리소스를 사용해야하는 경우 리소스를 얻을 수있는 추가 시도는 리소스를 사용할 수있을 때까지 차단됩니다 (일종의 시간 제한 있음).

풀을 사용한다는 것은 응용 프로그램이 멀티 스레드임을 암시하므로 구현이 스레드로부터 안전하다는 것도 중요합니다.

JDBC API는 잘 정의 된 연결 풀로 일반적으로 javax.sql.DataSource을 구현하므로 필요에 따라 연결 풀을 전환 할 수 있습니다. 주어진 javax.sql.Connection.close() 풀에 연결을 반환하는 데 사용해야합니다.