Подтвердить что ты не робот

Почему мы используем DataSource вместо DriverManager?

Я читаю спецификацию Java JDBC (vr. 4) и включил это утверждение:

DataSource - этот интерфейс был представлен в JDBC 2.0. Пакет API. Это предпочтительнее, чем DriverManager, потому что это позволяет сведения о базовом источнике данных, который будет прозрачным для Приложение

Я пытаюсь понять, в чем разница между Connection и DataSource, и почему она существует. Я имею в виду, что в приведенном выше блоке сказано, что сведения об источнике данных прозрачны для приложения, но не будут ли внешние свойства базы данных, такие как имя пользователя, пароль, URL и т.д., Помещаться в файл свойств, а затем использовать DriverManager таким же образом?

И интерфейс DataSource создан только для того, чтобы иметь общий способ возврата соединений, которые можно объединять в пулы и т.д.? В Java EE реализует ли сервер приложений этот интерфейс и развернутые приложения, чтобы иметь ссылку на источник данных вместо соединения?

4b9b3361

Ответ 1

Лучшая масштабируемость и обслуживание

Для диспетчера драйверов вам необходимо знать все детали (хост, порт, имя пользователя, пароль, класс драйвера) для подключения к БД и получения подключений. Вывод их в файл свойств ничего не меняет в том, что вам нужно их знать.

Используя DataSource, вам нужно знать только имя JNDI. AppServer заботится о деталях и настраивается не поставщиком клиентских приложений, а администратором, в котором размещено приложение.

Масштабируемость:

Предположим, вам нужно создать соединения самостоятельно, как бы вы справились с изменением нагрузки, иногда у вас есть 10 пользователей, иногда у вас 1000, вы не можете просто получить соединение, когда вам это нужно, и позже "освободить" его, чтобы сервер базы данных не выйти из соединений, что приводит вас к пулу соединений. DriverManager не предоставляет его, DataSource делает.

Если вы собираетесь программировать пул соединений самостоятельно, вам необходимо использовать DriverManager, в противном случае используйте DataSource.

Ответ 2

DriverManager.

  • препятствует производительности приложения, поскольку соединения создаются/закрываются в классах Java.
  • не поддерживает объединение пулов.

DataSource

  • повышает производительность приложений, поскольку соединения не создаются/закрываются внутри класса, они управляются сервером приложений и могут быть извлечены во время выполнения.
  • он предоставляет средство создания пула соединений
  • полезно для корпоративных приложений

Ответ 3

Ниже код показывает два способа получения соединения.

Нет необходимости знать о URL-адресе в случае mySqlDataSource, поскольку эта строка комментируется.

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));
    }

}

}

Ответ 4

Мы можем получить соединение с использованием источника данных следующим образом. Используйте соединение для выполнения любого запроса базы данных.

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

Ответ 5

Объекты DataSource могут предоставлять пулы соединений и распределенные транзакции, поэтому вам может понадобиться использовать DataSource, если вам нужна одна из этих двух или двух этих функций.