2014-11-22 2 views
0

Я разрабатываю программу, которая считывает файлы с локальной машины и загружает ее данные в сервер базы данных Oracle. Эта программа должна выполняться каждые 2-3 минуты через планировщик со средним объемом 2-3 входных файла для каждого прогона. Я хотел бы знать подход, который я должен предпринять, чтобы создать соединение с базой данных, чтобы оно создавало минимальное влияние на производительность.Подход для создания подключения к базе данных

Спасибо,

С наилучшими пожеланиями, Кунал

ответ

-1

Использованием Пулов соединений, что позволяет подключение физических баз данных для повторного использования с помощью нескольких логических экземпляров соединений, которые являются временными дескрипторами физического соединения. Используйте источник данных пула соединений для возврата объединенного соединения, которое инкапсулирует соединение физической базы данных. Затем используйте объединенное соединение, чтобы возвращать экземпляры соединения JDBC (по одному за раз), каждый из которых действует как временный дескриптор. Ниже приведен пример пула соединений Oracle.

... 
OracleConnectionPoolDataSource ocpds = new OracleConnectionPoolDataSource(); 

ocpds.setDriverType("oci"); 
ocpds.setServerName("dlsun999"); 
ocpds.setNetworkProtocol("tcp"); 
ocpds.setDatabaseName("816"); 
ocpds.setPortNumber(1521); 
ocpds.setUser("scott"); 
ocpds.setPassword("tiger"); 

PooledConnection pc = ocpds.getPooledConnection(); 

Connection conn = pc.getConnection(); 
... 
+0

Привет Jigar, Как это будет действовать, когда следующий экземпляр запускается до завершения ранее? Будет ли он блокировать стол? – Kunal

+0

Пул соединений - это набор предварительно установленных подключений. Если предыдущее соединение все еще используется, тогда оно берет другое соединение из пула. Как только задача подключения завершена, и она станет идеальной для предварительно определенных секунд. Ex. 30 секунд. Соединение вернулось в пул. В конфигурации вы можете определить количество соединений, которое вы хотите в пуле, их идеальное время и т. Д. –

+0

«ConnectionPoolDataSource» не является пулом подключений (или: он не должен быть одним)! Это всего лишь источник данных ** для ** реализации пула соединений (который будет содержать экземпляры «PooledConnection», полученные из «ConnectionPoolDataSource»). –

0

В случае с Oracle вы должны посмотреть на Универсальный пул соединений, UCP. См. https://docs.oracle.com/cd/E11882_01/java.112/e12265/toc.htm для получения более подробной информации.

Вы в основном использовать:

PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource(); 
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource"); 
pds.setURL("jdbc:oracle:thin:@//localhost:1521/XE"); 
pds.setUser("<user>"); 
pds.setPassword("<password>"); 
pds.setInitialPoolSize(5); 
Connection conn = pds.getConnection(); 
+0

Привет, Марк, поскольку продолжительность между запуском мала, меня беспокоит его поведение, когда второй экземпляр запускается до его завершения. Есть ли способ, которым я могу контролировать это? что-то вроде семафора? – Kunal

+0

@ user4280951 Параллелизм уже обрабатывается самим пулом подключений. –

Смежные вопросы