簡體   English   中英

無法打開 JPA EntityManager 進行事務處理; 嵌套異常是 javax.persistence.PersistenceException

[英]Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException

當我運行我的代碼時,我得到了這個異常:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1121)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:357)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2482)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2519)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2304)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:120)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139)
    at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51)
    at org.hibernate.tool.hbm2ddl.DatabaseExporter.<init>(DatabaseExporter.java:52)
    at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:367)
    at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304)
    at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:517)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Aug 25, 2015 8:23:45 PM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SCHWERWIEGEND: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection
    at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:457)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    at com.sun.proxy.$Proxy76.create(Unknown Source)

我不知道問題出在哪里。 但是昨天我工作得很好。

我的database.properties:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/streaming
jdbc.username=root
jdbc.password=password

hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.showsql=true
hibernate.hbm2ddl.auto=create

我可以直接從命令行運行 mysql。 問題出在哪里? 是錯的。 我使用 spring 4 並使用 mysql 作為數據庫語言進行休眠。

有人有什么想法嗎?

感謝。

出現 CommunicationsException:通信鏈路故障。

如果您收到 SQLException: Connection denied 或 Connection timed out 或 MySQL 特定的

CommunicationsException: Communications link failure

那么這意味着數據庫根本無法訪問。 這可能有以下一種或多種原因:

  • JDBC URL 中的 IP 地址或主機名錯誤。
  • 本地 DNS 服務器無法識別 JDBC URL 中的主機名。
  • JDBC URL 中的端口號缺失或錯誤。
  • 數據庫服務器已關閉。
  • 數據庫服務器不接受 TCP/IP 連接。
  • 數據庫服務器已用完連接。
  • Java 和 DB 之間的某些東西正在阻止連接,例如防火牆或代理。

要解決其中一個問題,請遵循以下建議:

  • 使用 ping 驗證和測試它們。
  • 刷新 DNS 或改用 JDBC URL 中的 IP 地址。
  • 根據 MySQL DB 的 my.cnf 進行驗證。
  • 啟動數據庫。
  • 驗證 mysqld 是否在沒有 --skip-networking 選項的情況下啟動。
  • 重新啟動數據庫並相應地修復您的代碼,使其最終關閉連接。
  • 禁用防火牆和/或配置防火牆/代理以允許/轉發端口。

資料來源: 更多詳情

數據庫已關閉。 您必須先啟動 DB 服務器並檢查與 telnet 或 mysql 命令行客戶端的連接。

我無法找出確切的原因,但我意識到這是因為一些線程池,因為我能夠使用終端連接到數據庫。 要檢查連接,您可以使用以下命令。

psql -h hostname -U username -d database

所以重新啟動服務器對我有用。

我看到@Amit Tamrakar 有很好的答案,但我想補充:

  • 如果您向數據庫發出大量請求(我的意思是連接),可能是該應用程序(某些應用程序線程)只是等待使用來自應用程序數據庫連接池的免費連接,但會引發超時異常。
.h.engine.jdbc.spi.SqlExceptionHelper   : HikariPool-1 - Connection is not available, request timed out after 30005ms.

Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection

您可以嘗試在應用程序配置文件中增加 db 連接池,例如:

spring.datasource.hikari.maximum-pool-size=20

你可以設置你需要的大小。 應用程序中的此配置default8 我們需要記住,每個數據庫都有自己的空閑數據庫連接大小,我們不需要超過。 我的意思是,如果 db 有 5 個免費連接並且您想在您的應用程序中使用 10 個連接,那么我們將收到這樣的異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM