Я хочу использовать Apache Commons DBCP, чтобы включить пул соединений в Java-приложении (в этом нет данных DataSource, предоставленных контейнером). На многих сайтах веб-сайта Apache site - использование библиотеки основано на этом фрагменте:
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUsername("scott");
ds.setPassword("tiger");
ds.setUrl(connectURI);
Затем вы получаете свои соединения с DB через метод getConnection(). Но на других сайтах - и Apache Site также - экземпляр 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
потокобезопасным (могу ли я использовать его как атрибут класса) или мне нужно синхронизировать его доступ?