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

    这问题,一看就是跟数据库有关。大概找了下资料,再看了下自己的程序配置,发现我的数据源是这么配的:

1<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 2 <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> 3 <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" /> 4 <property name="username" value="admin" /> 5 <property name="password" value="admin" /> 6</bean>

    再看看以前的数据源有这么配的:

1<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 2 <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> 3 <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" /> 4 <property name="username" value="admin" /> 5 <property name="password" value="admin" /> 6 </bean>

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

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

DBCP(Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用 就可以使用这个连接。 相当于是优化了DataSource的一种工具。

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

1    <dependency> 2 <groupId>commons-dbcp</groupId> 3 <artifactId>commons-dbcp</artifactId> 4 <version>1.4</version> 5 </dependency>

    好吧 ,稍微介绍记录下来备忘,继续纠结MQ去了。。。。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang