【问题标题】:JPA Connection to MySQL Throws "TOO MANY CONNECTION" ErrorJPA 与 MySQL 的连接引发“TOO MANY CONNECTION”错误
【发布时间】:2016-12-09 02:04:27
【问题描述】:

我尝试通过 Application-Server Glassfish 和 JPA 连接到 mysql 数据库。

我的 persistence.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
 <persistence-unit name="WEBSERVIE-EJB"
    transaction-type="JTA">
    <jta-data-source>AVS_TWO</jta-data-source>
    <properties>
        <property name="eclipselink.ddl-generation" value="create-or-extend-tables" />          
    </properties>
</persistence-unit>
</persistence>

但如果我尝试这样做,eclipse 的控制台会给我以下错误:

异常:无法分配连接,因为:数据源 拒绝建立连接,来自服务器的消息:“太多 连接”

异常 [EclipseLink-4019](Eclipse 持久性服务 - 2.5.0.v20130507-3faac2b):org.eclipse.persistence.exceptions.DatabaseException 异常 描述:获取有关数据库的信息时出错。 有关更多详细信息,请参阅嵌套异常。在 org.eclipse.persistence.exceptions.DatabaseException.errorRetrieveDbMetadataThroughJDBCConnection(DatabaseException.java:368) 在 org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.setOrDetectDatasource(DatabaseSessionImpl.java:225) 在 org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:734) 在 org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:239) 在 org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:681) 在 org.eclipse.persistence.internal.jpa.EntityManagerFactoryDe​​legate.getAbstractSession(EntityManagerFactoryDe​​legate.java:204) 在 org.eclipse.persistence.internal.jpa.EntityManagerFactoryDe​​legate.createEntityManagerImpl(EntityManagerFactoryDe​​legate.java:304) 在 org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:336) 在 org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:302) 在 org.glassfish.persistence.jpa.JPADeployer$2.visitPUD(JPADeployer.java:451) 在 org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510) 在 org.glassfish.persistence.jpa.JPADeployer.iterateInitializedPUsAtApplicationPrepare(JPADeployer.java:492) 在 org.glassfish.persistence.jpa.JPADeployer.event(JPADeployer.java:395) 在 org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:484) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219) 在 org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:527) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:523) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:360) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:522) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1423) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1500(CommandRunnerImpl.java:108) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1762) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1674) 在 com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534) 在 com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224) 在 org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:297) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:246) 在 org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 在 org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 在 org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 在 org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 在 org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 在 org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 在 org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 在 org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 在 org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 在 java.lang.Thread.run(Thread.java:745) 引起: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: 连接关闭后不允许任何操作。在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 在 com.mysql.jdbc.Util.getInstance(Util.java:387) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:917) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) 在 com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1246) 在 com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1241) 在 com.mysql.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:2946) 在 com.mysql.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:2941) 在 com.sun.gjc.spi.base.ConnectionHolder.getMetaData(ConnectionHolder.java:357) 在 com.sun.gjc.spi.jdbc40.ConnectionWrapper40.getMetaData(ConnectionWrapper40.java:114) 在 org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.setOrDetectDatasource(DatabaseSessionImpl.java:209) ... 46 更多原因: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通信链路故障 成功接收的最后一个数据包 服务器是 26.046 毫秒前。发送的最后一个数据包 成功到服务器是 0 毫秒前。在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 在 com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:988) 在 com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3552) 在 com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3452) 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3893) 在 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526) 在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673) 在 com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545) 在 com.mysql.jdbc.ConnectionImpl.setSessionMaxRows(ConnectionImpl.java:5432) 在 com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1960) 在 com.sun.gjc.spi.jdbc40.PreparedStatementWrapper40.executeQuery(PreparedStatementWrapper40.java:642) 在 org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:1002) 在 org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:641) 在 org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:558) 在 org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1995) 在 org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570) 在 org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242) 在 org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228) 在 org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:299) 在 org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelect(DatasourceCallQueryMechanism.java:281) 在 org.eclipse.persistence.queries.DataReadQuery.executeNonCursor(DataReadQuery.java:197) 在 org.eclipse.persistence.queries.DataReadQuery.executeDatabaseQuery(DataReadQuery.java:152) 在 org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899) 在 org.eclipse.persistence.queries.DataReadQuery.execute(DataReadQuery.java:137) 在 org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:3207) 在 org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1797) 在 org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1779) 在 org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1730) 在 org.eclipse.persistence.tools.schemaframework.SchemaManager.checkTableExists(SchemaManager.java:477) 在 org.eclipse.persistence.tools.schemaframework.TableCreator.extendTables(TableCreator.java:431) 在 org.eclipse.persistence.tools.schemaframework.TableCreator.extendTablesAndConstraints(TableCreator.java:411) 在 org.eclipse.persistence.tools.schemaframework.TableCreator.extendTables(TableCreator.java:402) 在 org.eclipse.persistence.tools.schemaframework.SchemaManager.extendDefaultTables(SchemaManager.java:1189) 在 org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.generateDefaultTables(EntityManagerFactoryProvider.java:108) 在 org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.writeDDLToDatabase(EntityManagerSetupImpl.java:3937) 在 org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.writeDDL(EntityManagerSetupImpl.java:3865) 在 org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.writeDDL(EntityManagerSetupImpl.java:3765) 在 org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:724) ... 43 更多原因:java.net.SocketException:软件导致 连接中止:recv 失败于 java.net.SocketInputStream.socketRead0(本机方法)在 java.net.SocketInputStream.socketRead(SocketInputStream.java:116) 在 java.net.SocketInputStream.read(SocketInputStream.java:170) 在 java.net.SocketInputStream.read(SocketInputStream.java:141) 在 com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:101) 在 com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:144) 在 com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:174) 在 com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3001) 在 com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3462) ... 78 更多

2016-08-03T13:09:47.479+0200|Schwerwiegend:部署时出现异常 应用程序 [WEB] 2016-08-03T13:09:47.479+0200|Schwerwiegend: 例外 在生命周期处理期间 org.glassfish.deployment.common.DeploymentException:异常 [EclipseLink-4019](Eclipse 持久性服务 - 2.5.0.v20130507-3faac2b):org.eclipse.persistence.exceptions.DatabaseException 异常 描述:获取有关数据库的信息时出错。 有关更多详细信息,请参阅嵌套异常。在 org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:762) 在 org.eclipse.persistence.internal.jpa.EntityManagerFactoryDe​​legate.getAbstractSession(EntityManagerFactoryDe​​legate.java:204) 在 org.eclipse.persistence.internal.jpa.EntityManagerFactoryDe​​legate.createEntityManagerImpl(EntityManagerFactoryDe​​legate.java:304) 在 org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:336) 在 org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:302) 在 org.glassfish.persistence.jpa.JPADeployer$2.visitPUD(JPADeployer.java:451) 在 org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510) 在 org.glassfish.persistence.jpa.JPADeployer.iterateInitializedPUsAtApplicationPrepare(JPADeployer.java:492) 在 org.glassfish.persistence.jpa.JPADeployer.event(JPADeployer.java:395) 在 org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:484) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219) 在 org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:527) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:523) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:360) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:522) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1423) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1500(CommandRunnerImpl.java:108) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1762) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1674) 在 com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534) 在 com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224) 在 org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:297) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:246) 在 org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 在 org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 在 org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 在 org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 在 org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 在 org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 在 org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 在 org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 在 org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 在 java.lang.Thread.run(Thread.java:745)

mysql 中的“max_connections”设置为 600。 这样就够了。

有什么问题?

【问题讨论】:

  • 您是否能够以其他方式连接到数据库,例如通过其他基于 JDBC 的应用程序或在 glassfish 中测试数据源?您是如何创建“AVS_TWO”数据源的?

标签: mysql jpa glassfish


【解决方案1】:

您是否尝试过使用连接池? eclipse链接可以看this 链接

【讨论】:

    【解决方案2】:

    我通过 JTA 连接到 glassfish。所以我在 Glassfish 中配置了一个 JDBC 连接池。如果我触发 glassfish 中的“Ping”按钮来测试连接,它就可以工作。

    【讨论】:

      【解决方案3】:

      https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

      B.5.2.7 连接过多

      如果您在尝试连接到 mysqld 服务器时收到 Too many connections 错误,这意味着所有可用的连接都被其他客户端使用。

      允许的连接数由 max_connections 系统变量控制。当 MySQL 与 Apache Web 服务器一起使用时,默认值为 151 以提高性能。 (以前,默认值为 100。)如果您需要支持更多的连接,您应该为此变量设置更大的值。

      【讨论】:

        猜你喜欢
        • 2015-06-09
        • 2021-12-31
        • 1970-01-01
        • 2014-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-24
        相关资源
        最近更新 更多