Почему мы используем источник данных вместо DriverManager?



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




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




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



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

640   5  

5 ответов:

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

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

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

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

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

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

DriverManager.

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

источник

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

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

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

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

нет необходимости знать о 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));
    }

}

}

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

Comments

    Ничего не найдено.