DBCP信息源 和c3p0

原创
小哥 3年前 (2022-11-11) 阅读数 8 #大杂烩

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 代码

  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

  2. destroy-method="close">

  3. <property name="driverClassName" value="com.mysql.jdbc.Driver" />

  4. <property name="url" value="jdbc:mysql://localhost:3309/sampledb" />

  5. <property name="username" value="root" />

  6. <property name="password" value="1234" />

  7. 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 代码

  1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"

  2. destroy-method="close">

  3. <property name="driverClass" value=" oracle.jdbc.driver.OracleDriver "/>

  4. <property name="jdbcUrl" value=" jdbc:oracle:thin:@localhost:1521:ora9i "/>

  5. <property name="user" value="admin"/>

  6. <property name="password" value="1234"/>

  7. 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。

配置文件的读取方式是指属性:

  1. <bean id="propertyConfigurer"

  2. class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

  3. <property name="location" value="/WEB-INF/jdbc.properties"/>

  4. bean>

  5. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

  6. destroy-method="close">

  7. <property name="driverClassName" value="${jdbc.driverClassName}" />

  8. <property name="url" value="${jdbc.url}" />

  9. <property name="username" value="${jdbc.username}" />

  10. <property name="password" value="${jdbc.password}" />

  11. bean>

在jdbc.properties特性值在特性文件中定义:

  1. jdbc.driverClassName= com.mysql.jdbc.Driver

  2. jdbc.url= jdbc:mysql://localhost:3309/sampledb

  3. jdbc.username=root

  4. jdbc.password=1234

提示 通常有开发人员${xxx}我无意中在前后键入了一些空格,这些空格字符将作为属性的值与变量合并。例如: 属性配置项(前后有空格)被解析,username的值为“ 1234 “这将导致最后的错误,因此需要特别小心。

获取JNDI数据源

如果应用程序配置在高性能应用程序服务器上(例如。WebLogic或Websphere我们可能更喜欢使用应用服务器本身提供的数据源。应用程序服务器的数据源 使用JNDI开放呼叫者使用,Spring为此,提供了一个特殊参考。JNDI资源的JndiObjectFactoryBean班下面是一个简单的配置:

xml 代码

  1. <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

  2. <property name="jndiName" value="java:comp/env/jdbc/bbt"/>

  3. bean>

通过jndiName指定引用的JNDI数据源名称。

Spring 2.0为获取J2EE资源提供了jee命名空间,jee命名空间,可以有效简化J2EE资源的引用。使用以下内容jee命名空间引用JNDI数据源配置:

xml 代码

  1. <beans xmlns=http://www.springframework.org/schema/beans

  2. xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

  3. xmlns:jee=http://www.springframework.org/schema/jee

  4. xsi:schemaLocation="http://www.springframework.org/schema/beans

  5. http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

  6. http://www.springframework.org/schema/jee

  7. http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">

  8. <jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/bbt"/>

  9. beans>

Spring数据源实现类

Spring本身也提供了一个简单数据源实现类DriverManagerDataSource ,它位于org.springframework.jdbc.datasource在包裹里。此类实现javax.sql.DataSource接口,但 它没有为每个调用提供池连接机制。getConnection()当您获得新连接时,只需创建一个新连接。因此,这个数据源类更适合于单元测试。 或者简单的独立应用程序,因为它不需要额外的依赖类。

接下来,让我们来看看DriverManagerDataSource简单使用:当然,我们也可以通过配置直接使用它。DriverManagerDataSource。

java 代码

  1. DriverManagerDataSource ds = new DriverManagerDataSource ();

  2. ds.setDriverClassName("com.mysql.jdbc.Driver");

  3. ds.setUrl("jdbc:mysql://localhost:3309/sampledb");

  4. ds.setUsername("root");

  5. ds.setPassword("1234");

  6. Connection actualCon = ds.getConnection();

小结

无论使用何种持久性技术,都需要定义数据源。Spring您可以选择定义两个数据源实现类包。在实际部署中,我们可以直接采用应用程序服务。 此时,可以传递服务器本身提供的数据源。JndiObjectFactoryBean或jee命名空间引用JNDI中的数据源。

DBCP与C3PO配置差异:

C3PO :

xml 代码

  1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

  2. <property name="driverClass">

  3. <value>oracle.jdbc.driver.OracleDrivervalue>

  4. </property>

  5. <property name="jdbcUrl">

  6. <value>jdbc:oracle:thin:@10.10.10.6:1521:DataBaseNamevalue>

  7. </property>

  8. <property name="user">

  9. <value>testAdminvalue>

  10. </property>

  11. <property name="password">

  12. <value>123456value>

  13. </property>

  14. </bean>

DBCP:

xml 代码

  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

  2. <property name="driverClassName">

  3. <value>oracle.jdbc.driver.OracleDrivervalue>

  4. </property>

  5. <property name="url">

  6. <value>jdbc:oracle:thin:@10.10.10.6:1521:DataBaseNamevalue>

  7. </property>

  8. <property name="username">

  9. <value>testAdminvalue>

  10. </property>

  11. <property name="password">

  12. <value>123456value>

  13. </property>

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除