Почему мы используем источник данных вместо DriverManager?
Я читаю спецификацию Java JDBC (vr. 4) и я столкнулся с этим утверждением:
источник данных-этот интерфейс был введен в JDBC 2.0 необязательно
Пакет API. Это предпочтительнее, чем DriverManager, потому что это позволяет
подробные сведения о базовом источнике данных, который должен быть прозрачным для
применение
Я пытаюсь понять, в чем разница между Connection и DataSource, и почему она существует. Я имею в виду, что в приведенном выше блоке говорится, что сведения об источнике данных прозрачны для приложения, но не будут ли внешние свойства базы данных, такие как имя пользователя, пароль, url и т. д., В файле свойств, а затем использовать DriverManager таким же образом?
и DataSource интерфейс создан только для того, чтобы иметь общий способ возврата соединений, которые могут быть объединены в пул и т. д.? В Java EE сервер приложений реализует этот интерфейс и приложения, развернутые для ссылки на источник данных вместо подключения?
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