### Spring 数据源配置详解:DBCP、C3P0与JNDI #### 一、引言 在Java企业级应用开发中,数据库连接管理是一个关键环节,它直接影响到应用程序的性能与稳定性。Spring框架提供了丰富的数据访问抽象层,使得开发者能够更便捷地管理数据库连接。本文将详细介绍如何在Spring框架中配置三种常见的数据库连接池:DBCP、C3P0以及通过JNDI(Java Naming and Directory Interface)获取数据源。 #### 二、Apache DBCP **DBCP(Database Connection Pool)** 是Apache Commons Pool的一个子项目,用于提供数据库连接池服务。使用DBCP时,需要引入两个JAR包:`commons-dbcp.jar` 和 `commons-pool.jar`。 - **配置示例**: - **BasicDataSource** 类是DBCP的核心类之一,通常用来配置数据库连接池的基本属性。 - **关闭连接**:当使用Spring管理Bean生命周期时,可以指定`destroy-method="close"`来确保资源被正确释放。 - **核心配置参数**: - **默认自动提交** (`defaultAutoCommit`):默认情况下为`true`,表示连接的默认自动提交状态。 - **默认只读模式** (`defaultReadOnly`):默认情况下为`false`,表示连接是否默认设置为只读模式。 - **默认事务隔离级别** (`defaultTransactionIsolation`):默认值由数据库驱动决定,可以根据需求进行设置。 - **默认目录** (`defaultCatalog`):设置连接的默认目录或模式。 - **初始大小** (`initialSize`):连接池创建时初始化的连接数量,默认为0。 - **最大活动连接数** (`maxActive`):连接池最大可同时保持的活动连接数,默认为8。 - **最大空闲连接数** (`maxIdle`):连接池的最大空闲连接数,默认为8。 - **最小空闲连接数** (`minIdle`):连接池中的最小空闲连接数,默认为0。 - **最大等待时间** (`maxWait`):当没有可用连接时,客户端等待连接的时间(毫秒),如果超过这个时间仍然没有连接返回,则会抛出异常,默认为-1,表示无限等待。 - **验证查询** (`validationQuery`):用于测试连接有效性的SQL查询语句,默认为空。 - **借用前测试** (`testOnBorrow`):在用户从池中借出连接前进行有效性验证,默认为`true`。 - **归还时测试** (`testOnReturn`):在用户将连接归还给池时进行有效性验证,默认为`false`。 - **空闲时测试** (`testWhileIdle`):定期对空闲连接进行有效性验证,默认为`false`。 - **空闲对象检查间隔时间** (`timeBetweenEvictionRunsMillis`):两次执行空闲对象检查之间的时间间隔(毫秒),默认为-1,表示不进行检查。 - **每次检查运行测试的连接数** (`numTestsPerEvictionRun`):每次执行空闲对象检查时测试的连接数,默认为3。 - **最小空闲时间** (`minEvictableIdleTimeMillis`):连接在被空闲对象检查器回收之前必须空闲的最短时间(毫秒),默认为1000 * 60 * 30 = 30分钟。 - **预编译语句池** (`poolPreparedStatements`):是否开启PreparedStatement缓存,默认为`false`。 - **最大预编译语句数** (`maxOpenPreparedStatements`):最大预编译语句数量,为0表示无限制。 - **允许直接访问底层连接** (`accessToUnderlyingConnectionAllowed`):是否允许直接访问底层数据库连接,默认为`false`。 - **移除被抛弃的连接** (`removeAbandoned`):是否移除超时未被归还的连接,默认为`false`。 - **被抛弃连接超时时间** (`removeAbandonedTimeout`):被抛弃连接的超时时间(秒),默认为300秒。 - **记录被抛弃的连接** (`logAbandoned`):是否记录被抛弃的连接,默认为`false`。 #### 三、C3P0 **C3P0**(Concurrent Data Source Pooling)也是一个开源的数据库连接池实现,它支持JDBC和JNDI,提供了丰富的配置选项。与DBCP相比,C3P0具有更好的性能和更广泛的特性支持。 - **核心配置参数**: - **最小空闲连接数** (`minSize`):连接池中最小空闲连接数。 - **最大空闲连接数** (`maxSize`):连接池中最大空闲连接数。 - **最大空闲时间** (`idleTestPeriod`):连接空闲多少秒后进行测试。 - **测试查询** (`testConnectionOnCheckin`):是否在连接返回给池时进行测试。 - **自动提交** (`autoCommitOnClose`):是否自动提交事务。 #### 四、使用JNDI获取数据源 在某些应用服务器中(如WebLogic、WebSphere等),通常使用JNDI来配置和管理数据源。这种方式可以让应用服务器统一管理数据源,从而简化应用程序的配置。 - **配置步骤**: 1. **定义JNDI数据源**:在应用服务器中配置数据源,并通过一个JNDI名称来标识该数据源。 2. **在Spring中配置JNDI Lookup**:使用`JndiObjectFactoryBean`来查找JNDI数据源,并将其注入到Spring Bean中。 #### 五、总结 本文详细介绍了在Spring框架中配置DBCP、C3P0以及通过JNDI获取数据源的方法。对于不同的应用场景,可以选择适合自己的数据库连接池方案。无论是DBCP还是C3P0,在Spring框架的支持下,都能够方便地进行配置和管理。此外,通过JNDI获取数据源的方式也适用于那些需要统一管理数据源的应用服务器环境。
- 粉丝: 2050
- 资源: 4206
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助