`
weitd
  • 浏览: 140601 次
  • 性别: Icon_minigender_1
  • 来自: 新都
社区版块
存档分类
最新评论

在spring配置jdbc-pool连接池

 
阅读更多
    看了一篇文章,讲jdbc-pool比c3p0、dbcp效率高,但没有找到它在spring中的配置方式,所以自己尝试了一下,成功了。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    <!--数据源配置-->       
    <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
        <property name="poolProperties">
            <bean class="org.apache.tomcat.jdbc.pool.PoolProperties">
                <property name="url" value="jdbc:sqlserver://172.168.16.11:1433;databaseName=xgerp"/>
                <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
                <property name="username" value="xgerp_r"/>
                <property name="password" value="xgerp"/>
                <property name="jmxEnabled" value="true"/>
                <property name="testWhileIdle" value="false"/>
                <property name="testOnBorrow" value="true"/>
                <property name="validationInterval" value="30000"/>
                <property name="testOnReturn" value="false"/>
                <property name="validationQuery" value="select 1"/>
                <property name="timeBetweenEvictionRunsMillis" value="30000"/>
                <property name="maxActive" value="100"/>
                <property name="initialSize" value="10"/>
                <property name="maxWait" value="10000"/>
                <property name="removeAbandonedTimeout" value="60"/>
                <property name="minEvictableIdleTimeMillis" value="30000"/>
                <property name="minIdle" value="10"/>
                <property name="logAbandoned" value="true"/>
                <property name="removeAbandoned" value="true"/>
                <property name="jdbcInterceptors" value="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"/>
            </bean>
        </property>
    </bean>

测试代码如下:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sql.DataSource;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * 简单测试jdbc-pool在spring中的配置
 * @author Administrator
 */
public class JdbcPoolTest {
    @Test
    public void testPool() {
        ApplicationContext context = new FileSystemXmlApplicationContext("file:G:/vss/xuguang/web/WEB-INF/applicationContext.xml");
        DataSource ds = (DataSource)context.getBean("dataSource");
        Connection con = null; 
        try {
            con = ds.getConnection();
            Statement st  = con.createStatement();
            ResultSet rs = st.executeQuery("select top 10 personName from comm_person");
            while (rs.next()) {
                System.out.println("personName: " + rs.getString("personName"));
            }
            rs.close();
            st.close();
        } catch (SQLException ex) {
            Logger.getLogger(JdbcPoolTest.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (con != null) try {con.close();} catch (Exception ignore){}
        }
    }
}
分享到:
评论
8 楼 asd2523011 2014-11-06  
楼主可以把程序打包提供下载吗?我试了一下,一直是堆栈溢出的错误,我看到tomcat的论坛里好多都报堆栈溢出的错误,公司好多人说jdbc只有配置数据源和在java里写。
7 楼 zhou85xin 2014-05-06  
既然用的连接池 为什么还要调用close方法呢
6 楼 zw1502071 2013-11-26  
楼主您好,有没有websphere在spring配置数据源的方法?类似于这一篇文章的做法
5 楼 zw1502071 2013-11-26  
请问楼主是怎么想到在spring配置文件中这样配置呢?谢谢
4 楼 zw1502071 2013-11-26  
需要将tomcat7中lib下的tomcat-jdbc.jar拷贝到项目中即可,并且url要按照不同驱动的写法而不尽相同,我试过了可行
3 楼 zw1502071 2013-11-26  
renren4 写道
你好,以前我使用的C3po,感觉经常挂死。我刚刚安装你的配置,发现下面的错误:
严重: Exception sending context initialized event to listener instance of class com.yhzs.web.listener.TaskListener
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: com.mysql.jdbc.Driver
Caused by: java.sql.SQLException: com.mysql.jdbc.Driver
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:243)
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:176)
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:662)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:602)
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:465)
at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:130)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:112)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:99)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:123)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:112)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:516)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:583)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:612)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:620)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:652)
at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:718)
at com.yhzs.web.dao.SensitiveWordInfoDAO.findSensitiveWordList(SensitiveWordInfoDAO.java:49)
at com.yhzs.web.service.SensitiveWordInfoSerivce.refreashSensitiveWordCahce(SensitiveWordInfoSerivce.java:81)
at com.yhzs.web.listener.TaskListener.initSensitiveWordCache(TaskListener.java:61)
at com.yhzs.web.listener.TaskListener.contextInitialized(TaskListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4765)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5260)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1525)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1515)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:236)
... 30 more
2012-7-11 22:47:24 org.apache.catalina.core.StandardContext startInternal

请问这个是为什么呢?


这个问题我也今天遇到了,报错和你一样。你看这句Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver ,这个类在tomcat-jdbc.jar中,
缺少tomcat7的lib下的tomcat-jdbc.jar,将这个jar拷贝到项目的lib下就解决了这个问题
2 楼 weitd 2012-07-12  
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
这个异常说你的环境下没有找到mysql的驱动,你查看一下的libs
1 楼 renren4 2012-07-11  
你好,以前我使用的C3po,感觉经常挂死。我刚刚安装你的配置,发现下面的错误:
严重: Exception sending context initialized event to listener instance of class com.yhzs.web.listener.TaskListener
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: com.mysql.jdbc.Driver
Caused by: java.sql.SQLException: com.mysql.jdbc.Driver
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:243)
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:176)
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:662)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:602)
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:465)
at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:130)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:112)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:99)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:123)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:112)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:516)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:583)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:612)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:620)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:652)
at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:718)
at com.yhzs.web.dao.SensitiveWordInfoDAO.findSensitiveWordList(SensitiveWordInfoDAO.java:49)
at com.yhzs.web.service.SensitiveWordInfoSerivce.refreashSensitiveWordCahce(SensitiveWordInfoSerivce.java:81)
at com.yhzs.web.listener.TaskListener.initSensitiveWordCache(TaskListener.java:61)
at com.yhzs.web.listener.TaskListener.contextInitialized(TaskListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4765)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5260)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1525)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1515)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:236)
... 30 more
2012-7-11 22:47:24 org.apache.catalina.core.StandardContext startInternal

请问这个是为什么呢?

相关推荐

    Spring Data JDBC与JDBC的区别

    JDBC规范   java.sql和javax.sql两个包中的类与接口(天龙八部):  DataSource:数据源  DriverManager:驱动管理  Driver:JDBC驱动 ... JDBC数据库连接池/Connection Pool  DBCP:apache tomcat内置  

    Java Spring常用高性能连接池以及属性

    Java Spring常用高性能连接池以及属性 * C3P0比较耗费资源,效率方面可能要低一点。 * DBCP在实践中存在BUG,在某些种情会产生很多空连接不能释放,Hibernate3.0已经放弃了对其的支持。 * Proxool的负面评价较少,...

    spring-boot-data-source-decorator:与p6spy,datasource-proxy,flexy-pool和spring-cloud-sleuth集成的Spring Boot

    添加连接池指标(jmx,codahale,dropwizard)和灵活的策略,以根据需要调整池大小 用于分布式跟踪的库(如果在classpath中找到)可启用jdbc连接和查询跟踪(仅适用于p6spy或datasource-proxy) 为什么不将...

    Java_jdbc数据库连接池总结

    为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再...

    阿里巴巴数据库连接池完整demo

    阿里巴巴数据库连接池应该是目前最好的数据库连接池:大并发稳定,操作数据库效率高。此demo不仅有和spring整合的例子,还有单独配置的实例,供大家学习掌握

    JSP Spring中Druid连接池配置详解

    JSP Spring中Druid连接池配置 jdbc.properties url=jdbc:postgresql://***.***.***.***:****/**** username=*** password=*** applicationContext.xml中配置bean &lt;!-- 阿里 druid 数据库连接池 --&gt; ...

    struts2.1.6+spring2.0+hibernate3.2常用配置包

    最近温习ssh2整合编程,顺便浏览下struts2有什么更新的消息,下载了新版本的struts2的2.1.8.1...注:以下包为数据源连接池 相关 用到那个添加相应的包 c3p0-0.9.1.2.jar //3 commons-pool.jar //3 commons-dbcp.jar //3

    Secure_Connection_Pool:从jdbc连接池属性中删除密码

    安全的JDBC连接池 安全JDBC连接池从JDBC连接池属性文件(例如tomcat和相关服务器的context.xml)中删除存储的纯文本密码。 Spring Framework HashiCorp Vault Spring Cloud Vault支持与HashiCorp Vault集成: ://...

    SpringBoot在yml配置文件中配置druid的操作

    最新版的druid和旧版在filter配置方面有些不同,以下是旧版druid中配置filter: spring: ##数据库连接信息 datasource: url: jdbc:mysql://localhost:3306/young username: root password: root driver-class...

    Maven拆分代码.zip

    --配置连接池--&gt; &lt;bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"&gt; &lt;property name="driverClassName" value="com.mysql.jdbc.Driver"/&gt; &lt;property name="url" value="jdbc:mysql:///...

    dbcp架包 mysql架包

    用于mysql连接,以及建立dbcp连接池所用,里面包含四个文件commons-dbcp-1.2.2.jar,commons-pool-1.3.jar,mysql-connector-java-5.1.18-bin.jar,org.springframework.jdbc-3.1.2.RELEASE.jar

    springmvcmybatis

    连接池最大数量 ${jdbc.maxActive}"&gt; 连接池最大空闲 ${jdbc.maxIdle}"&gt; 连接池最小空闲 ${jdbc.minIdle}"&gt; 获取连接最大等待时间 ${jdbc.maxWait}"&gt; --&gt; 数据库连接回调密码解密 ...

    dbcp 连接池不合理的锁导致连接耗尽解决方案

    dbcp 连接池不合理的锁导致连接耗尽解决方案 应用报错,表象来看是连接池爆满了。 org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested ...

    java高并发秒杀系统.rar

    # 连接池名(据说是最快的连接池) pool-name: DataHikariCP # 最小空闲连接数 minimum-idle: 5 # 空闲连接存活最大时间,默认600000(10分钟) idle-timeout: 18000 # 最大连接数,默认10 maximum-pool-...

    SpringBoot整合Mybatis多数据源配置

    一、配置文件配置数据源a和b:(这里使用的是springboot2.0+ 默认数据库连接池hikari) spring: datasource: a: driver-class-name: oracle.jdbc.OracleDriver jdbc-url: username: password: pool-name: b: ...

    java开发常用jar包

    DBCP数据库连接池 cglib-nodep-2.1_3.jar CGLIB是一个强大的高质量高性能的代码生成库,在运行时可以用它来扩展Java类 jfreechart-1.0.12.jar 使用java生成图表的工具 log4j-1.2.15.jar 通过使用Log4j,我们...

    E-BookStore:这是电子商店在线图书市场的服务器端程序,这是在母亲组织的大学EE培训期间的实用Java Web应用程序

    用于数据库连接池的Tomcat JDBC Pool Fast Json(由阿里巴巴制造)用于Json解析器 Gson(由Google制造)用于Json-Object转换 jQuery和Ajax用于前端和数据传输 用于包管理的Maven Docker-maven-plugin用于远程...

    基于springboot,采用mybatis和mapper3插件,基于shiro的sso cookies单机实现+源代码+文档说

    3. 自动创建数据库,关闭请在配置文件找到 JDBC 链接删除 **&createDatabaseIfNotExist=true**。 4. 自动运行SQL脚本,关闭请注释掉 **spring.datasource.schema**。 5. 默认登录 **admin/admin** 6. 打印后台 SQL ...

    ibatis 开发指南(pdf)

    ibatis 开发指南 ibatis Quick Start............................................................................................ 5 准备工作..............................................................

    2013java面试题搜集

    2、那说说数据库连接池的原理 3、Java的内存管理机制是什么 4、Javascript中怎么实现继承?有几种方式? 5、spring底层用什么实现? 6、hibernate和Jdbc的区别 7、Hibernate与Ibatis的区别 8、Struts2和1的...

Global site tag (gtag.js) - Google Analytics