2015-01-23 2 views
0

하나의 스레드가 JDBC를 사용하여 MySQL 데이터베이스에 영구적으로 연결되는 응용 프로그램을 작성 중이며 다른 스레드는이 연결을 사용하지 않습니다. 이 벌금단일 스레드 영구 연결을위한 JDBC Connection.isValid()?

import java.sql.Connection; 

public class ConHolder { 

    private Connection con; 

    public Connection getConnection(int checkTimeout) { 
     if(!con.isValid(checkTimeout)) { 
      con.close(); 
      con = createNewConnection(); 
     } 
     return con; 
    } 

    private Connection createNewConnection() { 
     return /* a newly created connection */; 
    } 

} 

인가 :

내 생각이 같은 것입니다? 아니면 실제 연결 풀이 필요합니까?

답변

1

나는 다소는 괜찮다고 생각합니다.

  • isValid 자바 6 이전에 사용할 수없는, 그리고

  • 여전히 연결이 응용 프로그램이 isValid를 호출하고 사용하려고 시도하는 사이에 나쁜가는 잠재적 인 고장 모드가있다 : 유일하게 가능한 문제는 연결이 중요한 것을 할 .


1 - 당신은 전형적인 연결 풀과 같은 고장 모드를 얻을 수 있습니다. 유일한 실제 솔루션은 트랜잭션을 다시 시작하여 연결이 끊어져 SQLException이 발생하는 경우를 처리하는 것입니다.

+0

단일 스레드 환경에서는 어떻게 가능합니까? – MinecraftShamrock

+0

@MinecraftShamrock 'Race condition'은 여기서 사용하는 용어입니다. 타이밍 윈도우 문제입니다. 연결 풀을 사용하는 것이 좋습니다. – EJP

+0

@EJP 당신은 isValid()와 새로운 연결 생성이 너무 오래 걸리기 때문에 연결 풀을 사용하여 여러 연결을 유지하는 것이 더 효율적이라는 것을 의미합니까? – MinecraftShamrock