jdbc连接池问题 使用的是spring框架自带的jdbctemplate,请问一下在同一次请求中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdbc连接池问题 使用的是spring框架自带的jdbctemplate,请问一下在同一次请求中相关的知识,希望对你有一定的参考价值。
jdbc连接池问题
使用的是spring框架自带的jdbctemplate,请问一下在同一次请求中,若使用多条sql,则会占的连接池数量是多少?
而数据库连接通常情况下是和线程绑定的
一个请求相当于一个线程
所以一个请求占有连接数量是1
这也便于数据库事务处理追问
我为项目配置了了最大连接池100,但在30次以上同时请求的情况下很容易就出现了超出连接池的问题。请问有办法解决吗
追答那就是你没有关闭连接的问题,获取配置问题,,检查连接处配置吧
追问好的,thanks
参考技术A jdbc连接是java与数据库连接的一个通道,由不同的数据库官方提供接口。jdbc数据连接池允许你在一个项目中,根据配置,指向不同类型的不同数据库,这样"可以实现,数据的分布式存储,从而更高效的与后台交互;jdbc连接池,你可以定义数据库库的最大(小)连接数,数据超时等打字不易,如满意,望采纳。
Spring JDBC模版以及三种数据库连接池的使用
jar包版本有点乱,直接忽略版本号,将就一下。
这里引了aop包是因为在spring3版本之后用模版对数据库库操作时会出现问题,但是不会报错,也没有提示。
所以这里直接引入,以及之后会用到的DBCP与C3P0连接池jar包等。
接着先在spring配置文件中配置连接池和模版
这里使用的是Spring的内置连接池
<!-- 引入属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置Spring内置的连接池 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- 引入属性文件的值 --> <property name="driverClassName" value="${jdbc.driverClassName}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置spring的JDBC的模版 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
也可以用第二种 数据库连接池DBCP
<!-- 引入属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置DBCP连接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <!-- 引入属性文件的值 --> <property name="driverClassName" value="${jdbc.driverClassName}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置spring的JDBC的模版 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
还可以用第三种 C3P0连接池
<!-- 引入属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置C3P0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 引入属性文件的值 --> <property name="driverClass" value="${jdbc.driverClassName}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置spring的JDBC的模版 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
这里注意C3P0连接池的属性名与其他连接池的属性名不一样。
使用JDBC的模板:保存数据
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class jdbcDemo1 { @Resource(name="jdbcTemplate") private JdbcTemplate jdbcTemplate; @Test public void demo() { jdbcTemplate.update("insert into account values (null,?,?)","加一",10000d); } }
这里直接引用了@Resource(name="jdbcTemplate")完成了属性的注入,是因为引入了test的jar包了,这种注入只能在单元测试中使用,否则要在普通类中使用这种方法,必须在spring配置中开启<context:component-scan>注解扫描。
这里顺便总结一下两种开启注解扫描方式的异同点:
<context:annotation-config>:注解扫描是针对已经在Spring容器里注册过的Bean
<context:component-scan>:不仅具备了<context:annotation-config>的所有功能,还可以在指定的package下面扫描对应的bean。
以上是关于jdbc连接池问题 使用的是spring框架自带的jdbctemplate,请问一下在同一次请求中的主要内容,如果未能解决你的问题,请参考以下文章