`
flylynne
  • 浏览: 361963 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring中数据源和数据库连接池配置的几种方法

 
阅读更多

一、           <!-- [endif]-->数据源的配置:

<!-- [if !supportLists]-->    <!-- [endif]--> Hibernate 集成最常见的一种:

<!-- 配置 sessionFactory -->

       < bean id = "sessionFactory" class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >

              < property name = "configLocation" >

                     < value > classpath:hibernate.cfg .xml </ value >

              </ property >

              <!-- < property name = "configLocation" value = "classpath:hibernate.cfg.xml" >

              </ property > -->

       </ bean >      

      

       <!-- 配置事务管理器 -->   

       < bean id = "transactionManager" class = "org.springframework.orm.hibernate3.HibernateTransactionManager" >

              < property name = "sessionFactory" >

                     < ref local = "sessionFactory" />

              </ property >

       </ bean >

<!-- [if !supportLists]-->    <!-- [endif]-->DataSource 单独配置:

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

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

              < property name = "url" value = "jdbc:mysql://127.0.0.1/test" />

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

              < property name = "password" value = "root" />

    </ bean >

   

       <!-- 配置 sessionFactory -->

       < bean id = "sessionFactory" class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >

              < property name = "dataSource" ref = "dataSource" ></ property >

              < property name = "configLocation" value = "classpath:hibernate.cfg.xml" >

              </ property >

       </ bean >      

      

       <!-- 配置事务管理器 -->   

       < bean id = "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" >

       < property name = "dataSource" >

              < ref local = "dataSource" />

       </ property >

              <!--<property name="sessionFactory">

                     <ref local="sessionFactory"/>

              </property>

       --> </ bean >

*取消掉 hibernate.cfg.xml 的配置文件直接配置在 Spring

<!-- 配置 sessionFactory -->

       <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

              <property name="dataSource" ref="dataSource"/>

              <property name="hibernateProperties">

                     <props>

                            <prop key="dialect">org.hibernate.dialect.MySQLDialect</prop>

                            <prop key="hibernate.hbm2ddl.auto">true</prop>

                            <prop key="hibernate.show_sql">true</prop>

                     </props>

              </property>

              <property name="mappingResources">

                     <list>

                            <value>com/bjsxt/model/Dictionary.hbm.xml</value>

                            <value>com/bjsxt/model/User.hbm.xml</value>

                            <value>com/bjsxt/model/Customer.hbm.xml</value>

                            <value>com/bjsxt/model/ContactPerson.hbm.xml</value>

                     </list>

              </property>

              <!--<property name="configLocation">

                     <value>classpath:hibernate.cfg.xml</value>

              </property>

       --></bean>

       <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

              <property name="dataSource">

                     <ref local="dataSource"/>

              </property>

       </bean>

<!-- [if !supportLists]-->二、           <!-- [endif]-->数据库连接池的配置

在传统的两层结构中,客户端程序在启动时打开数据库连接,在退出程序时关闭数据库连接。这样,在整个程序运行中,每个客户端始终占用一个数据库连接,即使在大量没有数据库操作的空闲时间,如用户输入数据时,从而造成数据库连接的使用效率低下。

在三层结构模式中,数据库连接通过中间层的连接池管理。只有当用户真正需要进行数据库操作时,中间层才从连接池申请一个连接,数据库操作完毕,连接立即释放到连接池中,以供其他用户使用。这样,不仅大大提高了数据库连接的使用效率,使得大量用户可以共享较少的数据库连接,而且省去了建立连接的时间。

 

关于数据库连接池几个属性的说明

<!-- [if !supportLists]-->        <!-- [endif]-->最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;

<!-- [if !supportLists]-->        <!-- [endif]-->最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。

<!-- [if !supportLists]-->        <!-- [endif]-->如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。

Xml 代码

<!-- [if !supportLists]-->1.      <!-- [endif]--><!-- JDBC 驱动程序 -->   

<!-- [if !supportLists]-->2.      <!-- [endif]--><property name = "connection.driver_class" > com.mysql.jdbc.Driver </property>

<!-- [if !supportLists]-->3.      <!-- [endif]--><property name = "connection.url" > jdbc:mysql://localhost:3306/struts? useUnicode = true & characterEncoding = GBK </property> <!-- 数据库用户名 -->   

<!-- [if !supportLists]-->1.      <!-- [endif]--><property name = "connection.username" > root </property> <!-- 数据库密码 -->   

<!-- [if !supportLists]-->2.      <!-- [endif]--><property name = "connection.password" > 8888 </property>    

上面的一段配置,在 c3p0 dbcp 中,都是必需的,因为 hibernate 会根据上述的配置来生成 connections ,再交给 c3p0 dbcp 管理 .

1
C3P0

只需在 hibernate.cfg.xml 中加入

Xml 代码

<!-- [if !supportLists]-->1.      <!-- [endif]--><property name = " c3p0.min_size" > 5 </property>   

<!-- [if !supportLists]-->2.      <!-- [endif]--><property name = " c3p0.max_size" > 30 </property>   

<!-- [if !supportLists]-->3.      <!-- [endif]--><property name = " c3p0.time_out" > 1800 </property>   

<!-- [if !supportLists]-->4.      <!-- [endif]--><property name = " c3p0.max_statement" > 50 </property>    

还有在 classespath 中加入 c3p0-0.8.4.5.jar

2 dbcp

hibernate.cfg.xml 中加入

Xml 代码

<!-- [if !supportLists]-->1.      <!-- [endif]--><property name = " dbcp.maxActive" > 100 </property>   

<!-- [if !supportLists]-->2.      <!-- [endif]--><property name = " dbcp.whenExhaustedAction" > 1 </property>   

<!-- [if !supportLists]-->3.      <!-- [endif]--><property name = " dbcp.maxWait" > 60000 </property>   

<!-- [if !supportLists]-->4.      <!-- [endif]--><property name = " dbcp.maxIdle" > 10 </property>   

<!-- [if !supportLists]-->5.      <!-- [endif]-->  

<!-- [if !supportLists]-->6.      <!-- [endif]--><property name = " dbcp.ps.maxActive" > 100 </property>   

<!-- [if !supportLists]-->7.      <!-- [endif]--><property name = " dbcp.ps.whenExhaustedAction" > 1 </property>   

<!-- [if !supportLists]-->8.      <!-- [endif]--><property name = " dbcp.ps.maxWait" > 60000 </property>   

<!-- [if !supportLists]-->9.      <!-- [endif]--><property name = " dbcp.ps.maxIdle" > 10 </property>   

还有在 classespath 中加入 commons-pool-1.2.jar commons-dbcp-1.2.1.jar.

3) proxool

hibernate.cfg.xml 中增加:

Xml 代码

<!-- [if !supportLists]-->1.      <!-- [endif]--><property name = "hibernate.proxool.pool_alias" > dbpool </property>   

<!-- [if !supportLists]-->2.      <!-- [endif]--><property name = "hibernate.proxool.xml" > proxool.xml </property>   

<!-- [if !supportLists]-->3.      <!-- [endif]--><property name = "connection.provider_class" > org.hibernate.connection.ProxoolConnectionProvider </property>   

3) 、在与 hibernate.cfg.xml 同级目录( src 根目录下)增加 proxool.xml 文件:

Xml 代码

<!-- [if !supportLists]-->1.      <!-- [endif]--><?xml version = "1.0" encoding = "utf-8" ?>   

<!-- [if !supportLists]-->2.      <!-- [endif]--><!-- the proxool configuration can be embedded within your own application's.   

<!-- [if !supportLists]-->3.      <!-- [endif]-->Anything outside the "proxool" tag is ignored. -- >   

<!-- [if !supportLists]-->4.      <!-- [endif]--><something-else-entirely>   

<!-- [if !supportLists]-->5.      <!-- [endif]--><proxool>   

<!-- [if !supportLists]-->6.      <!-- [endif]-->    <alias> dbpool </alias>   

<!-- [if !supportLists]-->7.      <!-- [endif]-->    <!--proxool 只能管理由自己产生的连接 -->   

<!-- [if !supportLists]-->8.      <!-- [endif]-->    <driver-url>   

<!-- [if !supportLists]-->9.      <!-- [endif]-->      jdbc:mysql://127.0.0.1:3306/wlsh? characterEncoding = GBK & useUnicode = true & autoReconnect = true       </driver-url>   

<!-- [if !supportLists]-->10.<!-- [endif]-->    <driver-class> com.mysql.jdbc.Driver </driver-class>   

<!-- [if !supportLists]-->11.<!-- [endif]-->    <driver-properties>   

<!-- [if !supportLists]-->12.<!-- [endif]-->        <property name = "user" value = "root" />   

<!-- [if !supportLists]-->13.<!-- [endif]-->        <property name = "password" value = "123456" />   

<!-- [if !supportLists]-->14.<!-- [endif]-->    </driver-properties>   

<!-- [if !supportLists]-->15.<!-- [endif]-->    <!-- proxool 自动侦察各个连接状态的时间间隔 ( 毫秒 ), 侦察到空闲的连接就马上回收 , 超时的销毁 -->   

<!-- [if !supportLists]-->16.<!-- [endif]-->    <house-keeping-sleep-time> 90000 </house-keeping-sleep-time>   

<!-- [if !supportLists]-->17.<!-- [endif]-->    <!-- 最少保持的空闲连接数 -->   

<!-- [if !supportLists]-->18.<!-- [endif]-->    <prototype-count> 5 </prototype-count>   

<!-- [if !supportLists]-->19.<!-- [endif]-->    <!-- 允许最大连接数 , 超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由 maximum-new-connections 决定 -->   

<!-- [if !supportLists]-->20.<!-- [endif]-->    <maximum-connection-count> 100 </maximum-connection-count>   

<!-- [if !supportLists]-->21.<!-- [endif]-->    <!-- 最小连接数 -->   

<!-- [if !supportLists]-->22.<!-- [endif]-->    <minimum-connection-count> 10 </minimum-connection-count>   

<!-- [if !supportLists]-->23.<!-- [endif]--></proxool>   

<!-- [if !supportLists]-->24.<!-- [endif]--></something-else-entirely>   


于在 hibernate3.0 中,已经不再支持 dbcp 了, hibernate 的作者在 hibernate.org 中,明确指出在实践中发现 dbcp BUG, 在某些种情会产生很多空连接不能释放,所以抛弃了对 dbcp 的支持。至于 c3p0 ,有评论说它的算法不是最优的,因为网上查资料得知:有网友做了一个实验,在同一项目中分别用了几个常用的连接池,然后测试其性能,发现 c3p0 占用资源 比较 大,效率也不高。所以,基于上述原因, proxool 不少行家推荐使用,而且暂时来说,是负面评价是最少的一个。在三星中也有项目是用 proxool 的。 从性能和出错率来说, proxool 稍微比前两种好些。 C3P0 ,稳定性似乎不错,在这方面似乎有很好的口碑。至于 性能 ,应该不是最好的,算是中规中矩的类型。
   Proxool 的口碑似乎很好,不大见到负面的评价,从官方资料上来看,有许多有用的特性和特点,也是许多人推荐的。

 

 

4 JNDI 连接池 ,数据源已经由应用服务配置好 ( Web 服务器 ) Hibernate 需要做的只是通过 JNDI 名查找到此数据源。应用服务器将连接池对外显示为 JNDI 绑定数据源,它是 javax.jdbc.Datasource 类的一个实例。只要配置一个 Hibernate 文件,如:

hibernate.connection.datasource=java:/comp/env/jdbc/schoolproject //JNDI


hibernate.transaction.factory_class = net.sf.hibernate.transaction.JTATransactionFactory

hibernate.transaction.manager_loopup_class =

org.hibernate.transaction.JBossTransactionManagerLookup

hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect

同样我们可以把上面的代码配置到 Spring 中:

1 dbcp

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

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

              < property name = "url" value = "jdbc:mysql://127.0.0.1/test" />

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

              < property name = "password" value = "root" />

              < property name = "maxActive" value = "80" />

              < property name = "maxIdle" value = "20" />

              < property name = "maxWait" value = "3000" />

</ bean >

<!-- [if !supportLists]-->3.      <!-- [endif]-->c3p0

<!-- close() 方法,确保在 spring 容器关闭时数据源能够成功释放 -->

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

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

              < property name = "jdbcUrl" value = "jdbc:mysql://127.0.0.1/test" />

              < property name = "user" value = "root" />

              < property name = "password" value = "root" />

             

              <!-- 当连接池中的连接用完时, c3p0 一次性创建连接的数目 -->

              < property name = "acquireIncrement" value = "5" />

             

              <!-- 定义从数据库获取新连接失败后重复尝试获取连接的次数,默认为 30 -->

              < property name = "acquireRetryAttempts" value = "30" />

             

              <!-- 定义两次连接中间隔的时间,单位毫秒,默认为 1000 -->

              < property name = "acquireRetryDelay" value = "1000" />

              < property name = "idleConnectionTestPeriod" value = "3000" />

             

              <!-- 当连接池用完时客户端调用 getConnection() 后等待获取新连接的时间,

              超时后将抛出 SQLException ,如设为 0 则无限期等待。单位毫秒,默认为 0   -->

              < property name = "checkoutTimeout"   value = "3000" />

              < property name = "maxPoolSize" value = "80" />

              < property name = "minPoolSize" value = "1" />

             

              <!-- JDBC 的标准参数,用以控制数据源内加载的 PreparedStatement 数量。

              但由于预缓存的 Statement 于单个 Connection 而不是整个连接池。

              所以设置这个参数需要考虑到多方面的因素,如果 maxStatements

              maxStatementsPerConnection 均为 0 ,则缓存被关闭。默认为 0

                -->

              < property name = "maxStatements" value = "6000" />

              < property name = "initialPoolSize" value = "5" />

             

</ bean >

注:其他参数的意义;

  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  

<!-- [if !supportLists]-->4.      <!-- [endif]-->proxool

< bean id = "dataSource" class = "org.logicalcobwebs.proxool.ProxoolDataSource" >

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

       <!-- 用户名,密码写在 url 中,属性之间用 &amp; (此处为转义字符)隔开 -->

       < property name = "driverUrl" value = "jdbc:mysql://127.0.0.1/test?user=root&amp;password=root&amp;

                                   useUnicode=true&amp;characterEncoding=gbk&amp;autoReconnect=true&amp;

                                   failOverReadOnly=false" />       

                                  

              <!--  此处用户名可不写,但属性必须存在 -->                   

       < property name = "user" value = "" />

      

       <!-- 此处密码可不写,但密码属性必须存在 -->

       < property name = "password" value = "" />

      

       <!-- 数据源的别名   -->

          < property name = "alias" value = "test" />

             

              <!-- proxool 自动侦察各个连接状态的时间间隔 ( 毫秒 ), 侦察到空闲的连接就马上回收 , 超时的销毁 默认 30 秒)

                -->

          < property name = "houseKeepingSleepTime" value = "30000" />

         

          <!--   最少保持的空闲连接数 (默认 2 个)

           -->

          < property name = "prototypeCount" value = "2" />

         

          <!-- 最大连接数 (默认 5 个) -->

          < property name = "maximumConnectionCount" value = "5" />

         

          <!-- 最小连接数 (默认 2 个) -->

          < property name = "minimumConnectionCount" value = "2" />

         

          < property name = "trace" value = "true" />

          < property name = "verbose" value = "true" />

             

</ bean >

 

Spring 的数据源实现类  
    Spring
本身也提供了一个简单的数据源实现类 DriverManagerDataSource  ,它位于 org.springframework.jdbc.datasource 包中。这个类实现了 javax.sql.DataSource 接口,但   它并没有提供池化连接的机制,每次调用 getConnection() 获取新连接时,只是简单地创建一个新的连接。因此,这个数据源类比较适合在单元测试   或简单的独立应用中使用,因为它不需要额外的依赖类。  
     
下面,我们来看一下 DriverManagerDataSource 的简单使用:当然,我们也可以通过配置的方式直接使用 DriverManagerDataSource

通过配置文件:

读配置文件的方式引用属性:  

view plaincopy to clipboardprint?

<!-- [if !supportLists]-->1.       <!-- [endif]--><bean   id = "propertyConfigurer"          

<!-- [if !supportLists]-->2.       <!-- [endif]-->class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >           

<!-- [if !supportLists]-->3.       <!-- [endif]-->     <property   name = "location"   value = "/WEB-INF/jdbc.properties" />           

<!-- [if !supportLists]-->4.       <!-- [endif]--></bean>           

<!-- [if !supportLists]-->5.       <!-- [endif]--><bean   id = "dataSource"   class = "org.apache.commons.dbcp.BasicDataSource"            

<!-- [if !supportLists]-->6.       <!-- [endif]-->         destroy-method = "close" >           

<!-- [if !supportLists]-->7.       <!-- [endif]-->     <property   name = "driverClassName"   value = "${jdbc.driverClassName}"   />           

<!-- [if !supportLists]-->8.       <!-- [endif]-->     <property   name = "url"   value = "${jdbc.url}"   />           

<!-- [if !supportLists]-->9.       <!-- [endif]-->     <property   name = "username"   value = "${jdbc.username}"   />           

<!-- [if !supportLists]-->10.   <!-- [endif]-->     <property   name = "password"   value = "${jdbc.password}"   />           

<!-- [if !supportLists]-->11.   <!-- [endif]--></bean>       


    
jdbc.properties 属性文件中定义属性值:  
   jdbc.driverClassName= com.mysql.jdbc.Driver 
    jdbc.url= jdbc:mysql://localhost:3309/sampledb 
    jdbc.username=root 
    jdbc.password=1234 

通过 jndi

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

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

           </ bean

分享到:
评论

相关推荐

    Spring in Action(第二版 中文高清版).part2

    5.2.2 使用数据源连接池 5.2.3 基于JDBC驱动的数据源 5.3 在Spring里使用JDBC 5.3.1 处理失控的JDBC代码 5.3.2 使用JDBC模板 5.3.3 使用Spring对JDBC的DAO支持类 5.4 在Spring里集成Hibernate 5.4.1 选择...

    Spring in Action(第二版 中文高清版).part1

    5.2.2 使用数据源连接池 5.2.3 基于JDBC驱动的数据源 5.3 在Spring里使用JDBC 5.3.1 处理失控的JDBC代码 5.3.2 使用JDBC模板 5.3.3 使用Spring对JDBC的DAO支持类 5.4 在Spring里集成Hibernate 5.4.1 选择...

    Spring in Action(第2版)中文版

    5.2.2使用数据源连接池 5.2.3基于jdbc驱动的数据源 5.3在spring里使用jdbc 5.3.1处理失控的jdbc代码 5.3.2使用jdbc模板 5.3.3使用spring对jdbc的dao支持类 5.4在spring里集成hibernate 5.4.1选择hibernate的...

    ssh(structs,spring,hibernate)框架中的上传下载

     文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...

    springmybatis

    sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 &lt;typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/&gt; 这个别名非常重要,你在 具体的类的映射中,比如User...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    java开源包4

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    java开源包1

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包11

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包2

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包3

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包6

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包5

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包10

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包8

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包7

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包9

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

    java开源包101

    它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...

Global site tag (gtag.js) - Google Analytics