Я хочу использовать Apache Commons DBCP, чтобы включить пул соединений в приложении Java (источник данных, предоставляемый контейнером в это). На многих веб-сайтах, включая Apache site - использование библиотеки основано на этом фрагменте:
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUsername("scott");
ds.setPassword("tiger");
ds.setUrl(connectURI);
Затем вы получаете соединения с БД с помощью метода getConnection (). Но на других сайтах - и также на сайте Apache - экземпляр Datasource создается следующим образом:
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectURI,null);
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory);
ObjectPool objectPool = new GenericObjectPool(poolableConnectionFactory);
PoolingDataSource dataSource = new PoolingDataSource(objectPool);
В чем разница между ними? Я использую пул соединений с BasicDataSource
, или мне нужен экземпляр PoolingDataSource
для работы с пулом соединений? Является ли BasicDataSource
потокобезопасным (могу ли я использовать его как атрибут класса) или мне нужно синхронизировать его доступ?