jdbc连接池问题 使用的是spring框架自带的jdbctemplate,请问一下在同一次请求中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdbc连接池问题 使用的是spring框架自带的jdbctemplate,请问一下在同一次请求中相关的知识,希望对你有一定的参考价值。

jdbc连接池问题
使用的是spring框架自带的jdbctemplate,请问一下在同一次请求中,若使用多条sql,则会占的连接池数量是多少?

一个jdbctemplate有一个数据库连接

而数据库连接通常情况下是和线程绑定的

一个请求相当于一个线程

所以一个请求占有连接数量是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,请问一下在同一次请求中的主要内容,如果未能解决你的问题,请参考以下文章

Spring JDBC模版以及三种数据库连接池的使用

day16 事务 - 数据库连接池 - 编写自己的jdbc框架

c3p0 数据库连接池

JDBC 和 Spring 连接池

hikari数据库连接池

如何使用 Spring Boot 设置 Spring JDBC 连接池?