Development Tip

DriverManager 대신 DataSource를 사용하는 이유는 무엇입니까?

yourdevel 2020. 10. 5. 21:03
반응형

DriverManager 대신 DataSource를 사용하는 이유는 무엇입니까?


Java JDBC 사양 (vr. 4)을 읽고 있는데 다음과 같은 진술을 접했습니다.

DataSource —이 인터페이스는 JDBC 2.0 선택적 패키지 API에 도입되었습니다. 기본 데이터 소스에 대한 세부 정보를 응용 프로그램에 투명하게 표시 할 수 있으므로 DriverManager보다 선호됩니다.

내가 이해하려는 것은 a Connection와 a 의 차이점 DataSource과 그것이 존재하는 이유입니다. 위의 블록은 데이터 소스에 대한 세부 정보가 응용 프로그램에 투명하지만 속성 파일에서 사용자 이름, 암호, url 등과 같은 데이터베이스 속성을 외부화 한 다음 같은 방식으로 DriverManager 작업을 사용하지 않는다고 말합니다.

그리고 DataSource풀링 할 수있는 연결을 반환하는 일반적인 방법을 갖도록 인터페이스가 만들어 졌습니까? Java EE에서 애플리케이션 서버는이 인터페이스를 구현하고 애플리케이션이 연결 대신 데이터 소스에 대한 참조를 갖도록 배치됩니까?


확장 성 및 유지 관리 향상

드라이버 관리자의 경우 DB에 연결하고 연결을 얻으려면 모든 세부 정보 (호스트, 포트, 사용자 이름, 암호, 드라이버 클래스)를 알아야합니다. 속성 파일에서 그것들을 외부화한다고해서 당신이 그것들을 알아야한다는 사실은 바뀌지 않습니다.

DataSource를 사용하면 JNDI 이름 만 알면됩니다. AppServer는 세부 사항에 관심이 있으며 클라이언트 애플리케이션의 공급 업체가 아니라 애플리케이션이 호스팅되는 관리자가 구성합니다.

확장 성 :

직접 연결을 생성해야한다고 가정 해 보겠습니다. 부하 변경을 어떻게 처리하고, 어떤 때는 10 명의 사용자가 있고, 1000 명의 사용자가있을 때, 필요할 때마다 연결을 얻을 수없고 나중에 '릴리스'할 수 없으므로 데이터베이스 서버가 그렇지 않습니다. 연결에서 벗어나면 연결 풀링이 발생합니다. DriverManager는이를 제공하지 않지만 DataSource는 제공합니다.

연결 풀을 직접 프로그래밍하려면 DriverManager를 사용해야하고 그렇지 않으면 DataSource를 사용해야합니다.


DriverManager.

  • 연결이 Java 클래스에서 생성 / 닫기 때문에 애플리케이션 성능이 저하됩니다.
  • 연결 풀링을 지원하지 않습니다.

데이터 소스

  • 연결이 클래스 내에서 생성 / 닫히지 않고 애플리케이션 서버에서 관리되며 런타임 중에 가져올 수 있으므로 애플리케이션 성능을 향상시킵니다.
  • 연결 풀을 만드는 기능을 제공합니다.
  • 엔터프라이즈 애플리케이션에 유용

아래 코드는 연결을 얻는 두 가지 방법을 보여줍니다.

mySqlDataSource이 줄이 주석 처리 된 경우 URL에 대해 알 필요가 없습니다 .

public class MySqlDataSourceTest {

public static void main(String[] args) throws SQLException, ClassNotFoundException {


    /************** using MysqlDataSource starts **************/
    MysqlDataSource d = new MysqlDataSource();
    d.setUser("root");
    d.setPassword("root");
//  d.setUrl("jdbc:mysql://localhost:3306/manavrachna");
    d.setDatabaseName("manavrachna");
    Connection c =  (Connection) d.getConnection();
    /************** using MysqlDataSource ends**************/


    /************** using DriverManager start **************/
    Class.forName("com.mysql.jdbc.Driver");
    Connection c=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/manavrachna","root","root");
    /************** using DriverManager ends **************/

    Statement st=(Statement) c.createStatement();
    ResultSet rs=st.executeQuery("select id from employee");
    while(rs.next())
    {
        System.out.println(rs.getInt(1));
    }

}

}

다음과 같이 데이터 소스를 사용하여 연결을 얻을 수 있습니다. 연결을 사용하여 데이터베이스 쿼리를 수행합니다.

DataSource datasource = (DataSource) new InitialContext().lookup(dataSourceName);
Connection connection = datasource.getConnection();

DataSource 개체는 연결 풀링 및 분산 트랜잭션을 제공 할 수 있으므로 이러한 기능 중 하나 또는 둘 모두가 필요한 경우 DataSource를 사용해야 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/15198319/why-do-we-use-a-datasource-instead-of-a-drivermanager

반응형