spring数据源DriverManagerDataSource和BasicDataSource

    提及来没什么好说的东西,Java后台的配置仍是照样的配,服务一直调用着正欢的时候发现跑个1000条记录tomcat就会有报错,大体错误以下:
org.springframework.tr ansaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection
    这问题,一看就是跟数据库有关。大概找了下资料,再看了下本身的程序配置,发现个人数据源是这么配的:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
        <property name="username" value="admin" />
        <property name="password" value="admin" />
</bean>
    再看看之前的数据源有这么配的:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
        <property name="username" value="admin" />
        <property name="password" value="admin" />
    </bean>

    好吧,那就熟悉下spring的DriverManagerDataSource与apache的BasicDataSource。 spring

    首先,DriverManagerDataSource在每一个链接请求时都新建一个链接,DriverManagerDataSource提供的链接没有进行池管理,当链接数到达必定的大小会出现异常。 数据库

    DBCP(Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库链接池,J2EE 服务器启动时会创建必定数量的池链接,并一直维持很多于此数目的池链接。客户端程序须要链接时,池驱动程序会返回一个未使用的池链接并将其表记为忙。若是当前没有空闲链接,池驱动程序就新建必定数量的链接,新建链接的数量有配置参数决定。当使用的池链接调用完成后,池驱动程序将此链接表记为空闲,其余调用 就可使用这个链接。 至关因而优化了DataSource的一种工具。 apache

    因此很容易想到,多是链接数量形成的。因此我把数据源链接改为了DBCP的,maven工程添加了下面的依赖。在此以前还遇到个小问题,我使用了1.2.1的版本,结果启动时候会报错,意思是找不到commons-collenctions.jar包在打包出来的部署在服务器上的竟然没有报错,多是服务器上存在这个包。纳闷了,这个包怎么回事,org.apache.commons.collections.map.LRUMap路径不对。因此果断不纠结,换了个1.4的,一切正常。: tomcat

    <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
    </dependency>
    好吧 ,稍微介绍记录下来备忘,继续纠结MQ去了。。。。
相关文章
相关标签/搜索