我希望在Java应用程序中使用Apache Commons DBCP实现连接池(不使用容器提供的DataSource)。在许多网站上,包括Apache网站,该库的使用基于以下代码片段:
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUsername("scott");
ds.setPassword("tiger");
ds.setUrl(connectURI);
您可以通过调用getConnection()方法获取DB连接。但是在其他网站上以及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
是否线程安全(我可以将其用作类属性),或者我需要同步其访问?