DBCP信息源 和c3p0
原创Spring第三方依赖包包含两个数据源的实现类包,其中一个是。Apache的DBCP,其二是 C3P0。可以在Spring使用配置文件中的两个选项之一配置数据源。
DBCP数据源
DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是依赖项 Jakarta commons-pool对象池机制的数据库连接池,因此它也必须包含在类路径下。/lib/jakarta- commons/commons-pool.jar。使用以下内容DBCP配置MySql数据源的配置片段:
xml 代码
-
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" -
destroy-method="close"> -
<property name="driverClassName" value="com.mysql.jdbc.Driver" /> -
<property name="url" value="jdbc:mysql://localhost:3309/sampledb" /> -
<property name="username" value="root" /> -
<property name="password" value="1234" /> -
bean>
BasicDataSource提供了close()方法关闭数据源,因此必须设置它。destroy-method=”close”属性, 以便Spring当容器关闭时,数据源可以正常关闭。除了上述必需的数据源属性之外,还有一些常见属性:
defaultAutoCommit:设置从数据源返回的连接是否采用自动提交机制。默认值为 true;
defaultReadOnly:设置数据源是否只能执行只读操作, 默认值为 false;
maxActive:最大连接数据库连接数,设置0意味着没有限制;
maxIdle:挂起连接的最大数量,设置0意味着没有限制;
maxWait:最大等待秒数(毫秒), 错误信息将在时间之后报告;
validationQuery:用于验证连接是否成功的查询。SQL语句,SQL语句必须返回至少一行数据, 如果您可以简单地将其设置为:“select count(*) from user”;
removeAbandoned:是否打断自己,默认值为 false ;
removeAbandonedTimeout:数据连接将在几秒钟后自动断开。removeAbandoned为true,提供价值;
logAbandoned:是否记录中断事件, 默认为 false;
C3P0数据源
C3P0是一个开放源代码JDBC数据源实现项目,该项目位于中。lib目录中与Hibernate一起发布,实现JDBC3和JDBC2扩展规格说明。 Connection 和Statement 池。C3P0类包位于/lib/c3p0/c3p0-0.9.0.4.jar。使用以下内容C3P0配置一个 oracle数据源:
xml 代码
-
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" -
destroy-method="close"> -
<property name="driverClass" value=" oracle.jdbc.driver.OracleDriver "/> -
<property name="jdbcUrl" value=" jdbc:oracle:thin:@localhost:1521:ora9i "/> -
<property name="user" value="admin"/> -
<property name="password" value="1234"/> -
bean>
ComboPooledDataSource和BasicDataSource这也为关闭数据源提供了。close()方法,这样我们可以保证Spring当容器关闭时,可以成功释放数据源。
C3P0拥有比DBCP更丰富的配置属性,可提供对数据源的各种有效控制:
acquireIncrement:当连接池中的连接用完时,C3P0一次创建的新连接数;
acquireRetryAttempts:定义在数据库获取新连接失败后,重复尝试从数据库获取该连接的次数。默认值为30;
acquireRetryDelay:两个连接之间的间隔(毫秒),默认值1000;
autoCommitOnClose:默认情况下,当连接关闭时,所有未提交的操作都会回滚。默认值为false;
automaticTestTable: C3P0将创建名称Test并用自己的查询语句对其进行测试。如果定义了此参数,则属性preferredTestQuery将被忽略。你 不在这里Test桌子上的任何操作都会。C3P0对于测试,默认值为null;
breakAfterAcquireFailure:获取连接失败将导致所有等待获取连接的线程引发异常。但是,数据源仍然有效,下次将进行调整。 用getConnection()继续尝试获取连接。如果已设置true,在尝试获取连接失败后,数据源将声明断开连接并永久关闭。默认值为 false;
checkoutTimeout:当连接池用完时由客户端调用。getConnection()等待获得新连接后,超时后将抛出该连接。SQLException,如设为0然后无限期等待。单位毫秒,默认值。0;
connectionTesterClassName: 通过实现ConnectionTester或QueryConnectionTester要测试连接,需要将类名设置为完全限定名。默认值为 com.mchange.v2.C3P0.impl.DefaultConnectionTester;
idleConnectionTestPeriod:检查连接池中所有空闲连接的秒数,默认值为0表示未检查;
initialPoolSize:初始化时创建的连接数应为。minPoolSize与maxPoolSize值之间。默认值为3;
maxIdleTime:最大空闲时间,超过空闲时间的连接将被丢弃。对于0或者负数永远不会被丢弃。默认值为0;
maxPoolSize:连接池中保留的最大连接数。默认值为15;
maxStatements:JDBC控制数据源中加载的标准参数。PreparedStatement量但是,由于预缓存Statement属 于单个Connection不是整个连接池。因此,如果需要,设置此参数需要考虑许多因素。maxStatements与 maxStatementsPerConnection均为0,缓存已关闭。默认值为0;
maxStatementsPerConnection:单个连接在连接池中的最大缓存。Statement数字默认值为0;
numHelperThreads:C3P0异步,速度慢JDBC操作是通过帮助流程完成的。扩展这些操作可以有效地提高性能,使多个操作能够通过多个线程同时执行。默认值为3;
preferredTestQuery:定义所有连接测试执行的测试语句。在连接测试的情况下,该参数可以显著提高测试速度。测试表必须在初始数据源时存在。默认值为null;
propertyCycle: 用户修改系统配置参数执行前最多等待的秒数字默认值为300;
testConnectionOnCheckout:由于高性能消耗,请仅在需要时使用。如果已设置true然后在每个connection提交时 将验证其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
以及其他提高连接测试性能的方法。默认值为false;
testConnectionOnCheckin:如果设置true然后,在获得连接时,将验证连接的有效性。默认值为false。
配置文件的读取方式是指属性:
-
<bean id="propertyConfigurer" -
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> -
<property name="location" value="/WEB-INF/jdbc.properties"/> -
bean> -
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" -
destroy-method="close"> -
<property name="driverClassName" value="${jdbc.driverClassName}" /> -
<property name="url" value="${jdbc.url}" /> -
<property name="username" value="${jdbc.username}" /> -
<property name="password" value="${jdbc.password}" /> -
bean>
在jdbc.properties特性值在特性文件中定义:
-
jdbc.driverClassName= com.mysql.jdbc.Driver -
jdbc.url= jdbc:mysql://localhost:3309/sampledb -
jdbc.username=root -
jdbc.password=1234
提示 通常有开发人员${xxx}我无意中在前后键入了一些空格,这些空格字符将作为属性的值与变量合并。例如: 属性配置项(前后有空格)被解析,username的值为“ 1234 “这将导致最后的错误,因此需要特别小心。
获取JNDI数据源
如果应用程序配置在高性能应用程序服务器上(例如。WebLogic或Websphere我们可能更喜欢使用应用服务器本身提供的数据源。应用程序服务器的数据源 使用JNDI开放呼叫者使用,Spring为此,提供了一个特殊参考。JNDI资源的JndiObjectFactoryBean班下面是一个简单的配置:
xml 代码
-
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> -
<property name="jndiName" value="java:comp/env/jdbc/bbt"/> -
bean>
通过jndiName指定引用的JNDI数据源名称。
Spring 2.0为获取J2EE资源提供了jee命名空间,jee命名空间,可以有效简化J2EE资源的引用。使用以下内容jee命名空间引用JNDI数据源配置:
xml 代码
-
<beans xmlns=http://www.springframework.org/schema/beans -
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance -
xmlns:jee=http://www.springframework.org/schema/jee -
xsi:schemaLocation="http://www.springframework.org/schema/beans -
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd -
http://www.springframework.org/schema/jee -
http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"> -
<jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/bbt"/> -
beans>
Spring数据源实现类
Spring本身也提供了一个简单数据源实现类DriverManagerDataSource ,它位于org.springframework.jdbc.datasource在包裹里。此类实现javax.sql.DataSource接口,但 它没有为每个调用提供池连接机制。getConnection()当您获得新连接时,只需创建一个新连接。因此,这个数据源类更适合于单元测试。 或者简单的独立应用程序,因为它不需要额外的依赖类。
接下来,让我们来看看DriverManagerDataSource简单使用:当然,我们也可以通过配置直接使用它。DriverManagerDataSource。
java 代码
-
DriverManagerDataSource ds = new DriverManagerDataSource (); -
ds.setDriverClassName("com.mysql.jdbc.Driver"); -
ds.setUrl("jdbc:mysql://localhost:3309/sampledb"); -
ds.setUsername("root"); -
ds.setPassword("1234"); -
Connection actualCon = ds.getConnection();
小结
无论使用何种持久性技术,都需要定义数据源。Spring您可以选择定义两个数据源实现类包。在实际部署中,我们可以直接采用应用程序服务。 此时,可以传递服务器本身提供的数据源。JndiObjectFactoryBean或jee命名空间引用JNDI中的数据源。
DBCP与C3PO配置差异:
C3PO :
xml 代码
-
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> -
<property name="driverClass"> -
<value>oracle.jdbc.driver.OracleDrivervalue> -
</property> -
<property name="jdbcUrl"> -
<value>jdbc:oracle:thin:@10.10.10.6:1521:DataBaseNamevalue> -
</property> -
<property name="user"> -
<value>testAdminvalue> -
</property> -
<property name="password"> -
<value>123456value> -
</property> -
</bean>
DBCP:
xml 代码
-
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> -
<property name="driverClassName"> -
<value>oracle.jdbc.driver.OracleDrivervalue> -
</property> -
<property name="url"> -
<value>jdbc:oracle:thin:@10.10.10.6:1521:DataBaseNamevalue> -
</property> -
<property name="username"> -
<value>testAdminvalue> -
</property> -
<property name="password"> -
<value>123456value> -
</property>
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123




