Mybatis 打开连接池和关闭连接池性能对比

1  创建数据库表

-- phpMyAdmin SQL Dump
-- version 4.2.11
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: 2016-08-02 18:13:50
-- 服务器版本: 5.6.21
-- PHP Version: 5.6.3

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `mybatis`
--

-- --------------------------------------------------------

--
-- 表的结构 `Student`
--

CREATE TABLE IF NOT EXISTS `Student` (
`id` int(10) NOT NULL,
  `name` varchar(256) NOT NULL,
  `age` int(4) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

--
-- 转存表中的数据 `Student`
--

INSERT INTO `Student` (`id`, `name`, `age`) VALUES
(1, ‘zhansan‘, 20);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `Student`
--
ALTER TABLE `Student`
 ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `Student`
--
ALTER TABLE `Student`
MODIFY `id` int(10) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2;
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;

2.  测试代码如下

package mybatisInsertDataDemo;

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import mybatisInsertDataDemo.Student;
import mybatisInsertDataDemo.demo;

public class demo {

	public static void main(String[] args) {

	    String resource = "mybatisInsertDataDemo/conf.xml";
		InputStream is = demo.class.getClassLoader().getResourceAsStream(resource);

		if(null == is)
		{
			System.out.println("inputstream is null");
			return;
		}

		 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);

	     long start = System.currentTimeMillis();

	     for(int i=0;i<10000;i++)
	     {
	    	 SqlSession session = sessionFactory.openSession();

		     String statement = "mybatisInsertDataDemo.studentMapper.insertStudent";
	    	  Student s = new Student();
		     s.setAge(20);
		     s.setName("lisi");

		     session.insert(statement, s);

		     session.close();
	     }

	     System.out.println("waste time  "+(System.currentTimeMillis()-start));

	}
}

 3.  打开与关闭连接池 配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置数据库连接信息 -->
            <dataSource type="UNPOOLED">  <!--UNPOOLED 是关闭连接池,POOLED 是打开连接池-->
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="mybatisInsertDataDemo/studentMapper.xml"/>
    </mappers>

</configuration>

  

4. 对比结果

插入一万条数据

打开连接池:  6s

关闭连接池:  36s

时间: 2024-08-02 10:57:26

Mybatis 打开连接池和关闭连接池性能对比的相关文章

开发MongoDB连接一定要关闭连接,异常中也一定要关

废不少工夫将数据存储,全部迁移至mongodb,未作大量改动则是主因. 但遇到奇怪的现象. 程序跑起不久后,mongodb即假死,另起客户端想登陆mongodb都不成. 要重启mongodb服务器才好转. 分析原因是mongodb的连接池满掉且不释放. 但从官网所了解的mongodb的连接是自行管理的,用完后自动释放,写几个demo测试,也完全符合这一点. 浪费了不少时间找这个问题的成因,并想办法作优化. 比如,设置windows的TCP连接数等等. 设置mongodb的连接数,等待时间等等.

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

我在玩webservice中遇到这个问题,情况是:(.net4.0)之前用的是好的,更新系统后出错.vs运行是好的,IIS运行出错..net底层抛错.换成.net2.0后完美运行.所以.net4.0出问题. ========================================================================================================= (转) 问题解决方法: 解决办法 1.在代码里面,把未关闭的连接关闭 2.扩大共

连接字符串中Min Pool Size的理解是错误,超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

Min Pool Size的理解是错误的 假设我们在一个ASP.NET应用程序的连接字符串中将Min Pool Size设置为30: <add name="cnblogs" connectionString="Data Source=.;Initial Catalog=cnblogs;Min Pool Size=30" providerName="System.Data.SqlClient"/> 访问一下应用程序,然后用Windows

[转]超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. 解决办法:首先要做的是在我们使用连接后立即关闭连接.如果没有关闭连接那么连接将保存到连接池中知道GC来销毁.这种情况下你以为连接池没有到达最大值但实际上连接池已经到达了最大值 其次我们可以通过连接字符串中的Max Pool Size = N;来动态扩大连接池中的连接最大数量. 说明: 也就是在connectionString中如果未指定max pool size的值,则max p

超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置 参考数据库链接串: <add key="data" value="server=192.168.1.123; Port=3306; uid=root; pwd=root;database=data;pooling=true;min pool size=5;max pool size=512;connect timeout = 20; "/> 查看应用程

【转】时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. 解决办法1.在代码里面,把未关闭的连接关闭2.扩大共享池,方法如下:解决方法可以是修改连接池的连接生存期,因为默认值是60秒,即连接从应用程序被释放后可以在池中保存的时间.具体操作步骤如下:如果是ODBC的话,则可以在ODBC Data Source Administrator中手动更改,该程序位于“Start”菜单中的“Programs”->\"Adminstrative

连接池(理论上应该是任意连接池) 、spring方法切入、 mybatis 、 redis等待请求 用了mysql连接的方法阻塞超过8小时导致mysql关闭连接 应用复活后用了已关闭连接而异常

服务进程中的服务方法blpop阻塞在redis队列下(等待请求),  使用方(客户代码)向该队列push请求以促使服务方法在阻塞的代码行继续运行下去. 服务方法使用了mybatis的SqlSessionTemplate, 在进入服务方法时spring为mybatis调用了连接池druid的getConnection, 假设很久没有请求来,一直阻塞在blpop处,直到mysql的wait_timeout默认8小时到达(导致mysql实际上已经关闭了该连接), 而此时处在方法内部, 一旦有请求来,代

解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。

解决Mysql连接池被关闭  ,hibernate尝试连接不能连接的问题. (默认MySQL连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池. 所以系统发布第二天访问会失去链接,导致访问失败.因此稳定解决办法是把hibernate默认的连接池换成c3p0链接池. 在Hibernate(spring管理)中的配置:<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledData

SQLServer的最大连接数 超时时间已到 但是尚未从池中获取连接

很多做架构设计.程序开发.运维.技术管理的朋友可能或多或少有这样的困惑: SQLServer到底支持多少连接数的并发? SQLServer是否可以满足现有的应用吗? 现有的技术架构支持多少连接数的并发? 在硬件性能与网络性能足够理想的情况下理论上可以支持多少并发连接? 生产环境中的数据库现在的并发量是多少? 如何监控现有数据库并发的数量? 生产环境中的并发量距离理论上的最大并量发还差多少? 为此,我专门写程序做了下测试,利用循环不断的打开连接并保持连接打开不关闭,测试代码如下: using Sy