0 0

c3p0 threadLocal 报错:too many connection10

code="java"]public class DBUtil {
private static final ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();

/**
* 取得数据库连接
* @return
*/
public static Connection getConnection() {
Connection conn = null;
conn = threadLocal.get();
if(conn==null) {
conn = ConnectionManager.getInstance().getConn();
threadLocal.set(conn);
}
return conn;
}


public static void closeConn() {
Connection conn = threadLocal.get();
try {
if(conn!=null && !conn.isClosed()) {
conn.close();
threadLocal.remove();
}
} catch (SQLException e) {
e.printStackTrace();
}
}

public static void main(String args[]) {
for(int i=0;i<30;i++) {
Connection conn = getConnection();
closeConn();
System.out.println(i+"="+conn);
}
}
}


public class ConnectionManager {
	private static ConnectionManager instance;
	private ConnectionManager(){}
	
	public synchronized Connection getConn() {
		Connection conn = null;
		ComboPooledDataSource ds = new ComboPooledDataSource("userApp");
		
		try {
			conn = ds.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static ConnectionManager getInstance() {
		if(instance==null) {
			instance = new ConnectionManager();
		}
		return instance;
	}
	
}


c3p0配置
<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/examtest?useUnicode=true&amp;characterEncoding=utf-8</property>
		<property name="user">root</property>
		<property name="password">root</property>
		<property name="acquireIncrement">10</property>
		<property name="acquireRetryAttempts">30</property>
		<property name="initialPoolSize">10</property>
		<property name="minPoolSize">10</property>
		<property name="maxPoolSize">40</property>
		<property name="checkoutTimeout">1000</property>
		<property name="idleConnectionTestPeriod">18000</property>
		<property name="maxIdleTime">25000</property>

[color=red]一运行就报错:[/color]
java.sql.SQLException: Data source rejected establishment of connection,  message from server: "[color=red]Too many connections[/color]"
	at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1018)
	at com.mysql.jdbc.Connection.createNewIO(Connection.java:2568)
	at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
	at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:119)
	at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:143)
	at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:132)
	at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.initializeAutomaticTestTable(C3P0PooledConnectionPoolManager.java:772)
	at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.createPooledConnectionPool(C3P0PooledConnectionPoolManager.java:696)
	at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.getPool(C3P0PooledConnectionPoolManager.java:257)
	at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.getPool(C3P0PooledConnectionPoolManager.java:271)
	at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
	at com.tom.util.ConnectionManager.getConn(ConnectionManager.java:17)
	at com.tom.util.DBUtil.getConnection(DBUtil.java:19)
	at com.tom.util.DBUtil.main(DBUtil.java:115)
28=null

问题补充:只能取得10个连接,第11个就开始报错
2012年11月06日 19:10

1个答案 按时间排序 按投票排序

0 0

1.可能是mysql的max connections设置的问题
2.可能是多次insert,update操作没有关闭session,需要在spring里配置transaction支持。

解决:
1.修改tomcat里的session 的time-out时间减少为20,(不是必改项)
2.对处理量大的对数据库insert或update的操作提供transaction支持.

=======================================
下面的是解决办法:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"

原因:

因为你的mysql安装目录下的my.ini中设定的并发连接数太少或者系统繁忙导致连接数被占满


解决方式:

打开MYSQL安装目录打开MY.INI找到max_connections(在大约第93行)默认是100 一般设置到500~1000比较合适,重启mysql,这样1040错误就解决啦。
max_connections=1000

一定要重新启动MYSQL才能生效

CMD->

net stop mysql

net start mysql



关于改变innodb_log_file_size后无法启动mysql的问题


innodb_buffer_pool_size=768M
innodb_log_file_size=256M
innodb_log_buffer_size=8M
innodb_additional_mem_pool_size=4M
innodb_flush_log_at_trx_commit=0
innodb_thread_concurrency=20
以上是对innodb引擎的初步优化, 发现是更新innodb_log_file_size=256M时候出现了问题,只要加上这个就无法启动,


后来才知道原来要STOP服务先,然后再删除原来的文件………
打开/MySQL Server 5.5/data

删除ib_logfile0, ib_logfile1........ib_logfilen

2012年11月07日 09:17

相关推荐

    c3p0 小例

    在这个例子中,`C3p0Pool`类的`connectionHolder`是一个ThreadLocal变量,用于存储每个线程的数据库连接。当线程需要连接时,它会从ThreadLocal中获取或创建一个新的连接;当操作完成后,连接会被关闭并从...

    JAVA数据库连接池(C3P0,Druid,JNDI ,DBCP,Proxool,BoneCP)

    本文将详细介绍几个常见的Java数据库连接池实现:C3P0、Druid、JNDI、DBCP、Proxool以及BoneCP,并结合Spring+MyBatis+maven环境下的应用示例进行解析。 1. C3P0: C3P0是一个开源的JDBC连接池,它实现了数据源和...

    ThreadLocal应用示例及理解

    **线程局部变量(ThreadLocal)是Java编程中一个非常重要的工具类,它在多线程环境下提供了线程安全的数据存储。ThreadLocal并不是一个变量,而是一个类,它为每个线程都创建了一个独立的变量副本,使得每个线程都...

    ThreadLocal:如何优雅的解决SimpleDateFormat多线程安全问题

    目录SimpleDateFormat诡异bug复现SimpleDateFormat诡异bug字符串日期转Date日期(parse)Date日期...ThreadLocal使用demoThreadLocal源码探索ThreadLocal注意事项使用ThreadLocal解决SimpleDateFormat线程安全问题总结...

    ThreadLocal和事务

    在这个小型简单练习中,我们看到如何结合c3p0数据源、ThreadLocal以及事务管理,来创建一个在MVC三层结构中实现互不干扰的转账操作。 首先,让我们深入了解`ThreadLocal`。ThreadLocal是Java提供的一个线程绑定变量...

    java 简单的ThreadLocal示例

    Java中的ThreadLocal是一个非常重要的工具类,它在多线程编程中扮演着独特角色,尤其在处理线程间数据隔离和共享时。ThreadLocal不是线程本身,而是为每个线程提供一个独立的变量副本,使得每个线程都可以独立地改变...

    ThreadLocal源码(版本:Android4.3,,含注释)

    ThreadLocal源码(版本:Android4.3,,含注释)

    使用ThreadLocal管理“session”数据

    在Java编程中,ThreadLocal是线程局部变量的类,它提供了一种在多线程环境中为每个线程创建和维护独立副本的机制。ThreadLocal主要用于解决线程间的数据隔离问题,确保各线程拥有自己的变量副本,避免了数据共享带来...

    ThreadLocal

    ThreadLocal是Java编程语言中的一个类,用于在多线程环境中提供线程局部变量。它是一种特殊类型的变量,每个线程都有自己的副本,互不影响,从而实现线程间数据隔离。ThreadLocal通常被用来解决线程共享数据时可能...

    事务的封装和Threadlocal实例

    private static final ThreadLocal&lt;Connection&gt; connectionHolder = new ThreadLocal(); public static void setConnection(Connection conn) { connectionHolder.set(conn); } public static Connection get...

    JavaEE DBUtil结合ThreadLocal的一个案例

    1. 数据库连接池:如C3P0、HikariCP、Druid等,用于高效管理数据库连接,减少数据库连接的创建和关闭带来的开销。 2. 连接获取与释放:提供getConnection()和returnConnection()方法,分别用于获取和归还数据库连接...

    ThreadLocal_ThreadLocal源码分析_

    **ThreadLocal概述** ThreadLocal是Java中的一个线程局部变量类,它为每个线程创建了一个独立的变量副本。这意味着每个线程都有自己的ThreadLocal变量,互不干扰,提供了线程安全的数据存储方式。ThreadLocal通常...

    正确理解ThreadLocal.pdf

    ### 正确理解ThreadLocal:深入解析其工作原理与应用场景 #### 一、ThreadLocal的基本概念 `ThreadLocal`是Java平台提供的一种线程局部变量的解决方案,它为每一个使用该变量的线程都提供了独立的变量副本,使得每...

    Spring事务处理-ThreadLocal的使用

    例如,`HikariCP`和`C3P0`等流行的连接池实现都支持与Spring事务管理的无缝集成。 在实际应用中,理解ThreadLocal在Spring事务处理中的作用有助于优化并发性能和解决多线程环境下的事务问题。例如,如果线程之间...

    ThreadLocal原理及在多层架构中的应用

    **线程局部变量(ThreadLocal)是Java编程中一个非常重要的概念,主要用于在多线程环境中为每个线程提供独立的变量副本。ThreadLocal不是一种数据结构,而是一种解决线程间共享数据的方式,它提供了线程安全的局部...

    Quartz-ThreadLocal.rar

    这个压缩包 "Quartz-ThreadLocal.rar" 内含的学习资源很可能是关于如何在 Quartz 调度器中结合使用 ThreadLocal 的示例。 Quartz 的核心功能包括: 1. **作业与触发器**:在 Quartz 中,任务被称为“作业”(Job)...

    java事务 - threadlocal

    Java事务和ThreadLocal是两种在Java编程中至关重要的概念,它们分别用于处理多线程环境下的数据一致性问题和提供线程局部变量。 首先,我们来深入理解Java事务。在数据库操作中,事务是一系列操作的集合,这些操作...

Global site tag (gtag.js) - Google Analytics