Java Jboss EAP 7.0+;冬眠5+;Azure DB:数据源返回SQL错误:0,SQLState:null

Java Jboss EAP 7.0+;冬眠5+;Azure DB:数据源返回SQL错误:0,SQLState:null,java,hibernate,jboss,azure-sql-database,datasource,Java,Hibernate,Jboss,Azure Sql Database,Datasource,我和我的团队第一次开发到Azure环境中。 我们正在开发一个三层应用程序,我们的后端WebApp出现问题 此应用程序包含一个配置了Hibernate 5.0.3的DataLayer.jar,指向Jboss EAP 7.0数据源 我们的主要问题是,在部署1到2小时后(很明显,即使在长时间不用之后),我们开始收到如下错误: WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-4) SQL Error: 0, S

我和我的团队第一次开发到Azure环境中。 我们正在开发一个三层应用程序,我们的后端WebApp出现问题

此应用程序包含一个配置了Hibernate 5.0.3的DataLayer.jar,指向Jboss EAP 7.0数据源

我们的主要问题是,在部署1到2小时后(很明显,即使在长时间不用之后),我们开始收到如下错误:

WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-4) SQL Error: 0, SQLState: null
ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-4) IJ031040: Connection is not associated with a managed connection: org.j

WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-32) SQL Error: 0, SQLState: 08S01
ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-32) Connection reset
WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-1) SQL Error: 0, SQLState: null
ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-1) IJ031040: Connection is not associated with a managed connection: org.jboss.jca.adapters.jdbc.jdk8.WrappedConnectionJDK8@3a0def4b
WARN  [org.jboss.jca.core.connectionmanager.listener.NoTxConnectionListener] (default task-2) IJ000305: Connection error occured: org.jboss.jca.core.connectionmanager.listener.NoTxConnectionListener@253f452d[state=NORMAL managed connection=org.jboss.jca.adapters.jdbc.local.LocalManagedConnection@32b71315 connection handles=1 lastReturned=1515136631568 lastValidated=1515138292439 lastCheckedOut=1515138302331 trackByTx=false pool=org.jboss.jca.core.connectionmanager.pool.strategy.OnePool@31187fff mcp=SemaphoreConcurrentLinkedQueueManagedConnectionPool@47d017b9[pool=MyDataBase]]: com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset

[org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-2) SQL Error: 0, SQLState: 08S01
[org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-2) Connection reset
[org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-3) SQL Error: 0, SQLState: null
[org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-3) IJ031040: Connection is not associated with a managed connection: org.jboss.jca.adapters.jdbc.jdk8.WrappedConnectionJDK8@234ed87d
[org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-4) SQL Error: 0, SQLState: null
[org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-4) IJ031040: Connection is not associated with a managed connection: org.jboss.jca.adapters.jdbc.jdk8.WrappedConnectionJDK8@7dfde86
[org.jboss.jca.core.connectionmanager.listener.NoTxConnectionListener] (default task-5) IJ000305: Connection error occured: org.jboss.jca.core.connectionmanager.listener.NoTxConnectionListener@2c142405[state=NORMAL managed connection=org.jboss.jca.adapters.jdbc.local.LocalManagedConnection@e35bc5 connection handles=1 lastReturned=1515137178316 lastValidated=1515137178316 lastCheckedOut=1515137180529 trackByTx=false pool=org.jboss.jca.core.connectionmanager.pool.strategy.OnePool@31187fff mcp=SemaphoreConcurrentLinkedQueueManagedConnectionPool@47d017b9[pool=MyDataBase]]: com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset
如果我们禁用并重新启用部署的战争,它将恢复正常,直到前面提到的1/2小时

我们搜索了很多,但是对我们的项目做了很多修改,但是我们仍然有同样的问题

实际上,我们的Jboss EAP 7.0数据源配置如下:

                <datasource jta="false" jndi-name="java:jboss/datasources/mydb" pool-name="MyDataBase" enabled="true" use-ccm="false">
                <connection-url>jdbc:sqlserver://myserverdatabaseonazure:1433;databaseName=mydbname</connection-url>
                <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
                <driver>sql</driver>
                <pool>
                    <min-pool-size>100</min-pool-size>
                    <initial-pool-size>500</initial-pool-size>
                    <max-pool-size>850</max-pool-size>
                    <flush-strategy>FailingConnectionOnly</flush-strategy>
                </pool>
                <security>
                    <user-name>myuser@mydomain</user-name>
                    <password>mypassword</password>
                </security>
                <validation>
                    <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"/>
                    <check-valid-connection-sql>select current_timestamp</check-valid-connection-sql>
                    <background-validation>true</background-validation>
                    <background-validation-millis>30000</background-validation-millis>
                    <use-fast-fail>false</use-fast-fail>
                    <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter"/>
                </validation>
            </datasource>
 <?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="smdatasource" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>java:jboss/datasources/mydb</non-jta-data-source>
    <class>modelsclassesarehere</class>
    <properties>
      <!--com.microsoft.sqlserver.jdbc.SQLServerDriver-->
      <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
      <property name="hibernate.default_schema" value="mydefaultschema"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect"/>
      <property name="hibernate.connection.release_mode" value="on_close"/>
      <property name="hibernate.enable_lazy_load_no_trans" value="true"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.jdbc.time_zone" value="UTC"/>
      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/>
    </properties>
  </persistence-unit>
</persistence>

jdbc:sqlserver://myserverdatabaseonazure:1433;databaseName=mydbname
com.microsoft.sqlserver.jdbc.SQLServerDriver
sql
100
500
850
仅连接失败
myuser@mydomain
我的密码
选择当前时间戳
真的
30000
假的
Hibernate 5.0.3上的Persistence.xml如下所示:

                <datasource jta="false" jndi-name="java:jboss/datasources/mydb" pool-name="MyDataBase" enabled="true" use-ccm="false">
                <connection-url>jdbc:sqlserver://myserverdatabaseonazure:1433;databaseName=mydbname</connection-url>
                <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
                <driver>sql</driver>
                <pool>
                    <min-pool-size>100</min-pool-size>
                    <initial-pool-size>500</initial-pool-size>
                    <max-pool-size>850</max-pool-size>
                    <flush-strategy>FailingConnectionOnly</flush-strategy>
                </pool>
                <security>
                    <user-name>myuser@mydomain</user-name>
                    <password>mypassword</password>
                </security>
                <validation>
                    <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"/>
                    <check-valid-connection-sql>select current_timestamp</check-valid-connection-sql>
                    <background-validation>true</background-validation>
                    <background-validation-millis>30000</background-validation-millis>
                    <use-fast-fail>false</use-fast-fail>
                    <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter"/>
                </validation>
            </datasource>
 <?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="smdatasource" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>java:jboss/datasources/mydb</non-jta-data-source>
    <class>modelsclassesarehere</class>
    <properties>
      <!--com.microsoft.sqlserver.jdbc.SQLServerDriver-->
      <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
      <property name="hibernate.default_schema" value="mydefaultschema"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect"/>
      <property name="hibernate.connection.release_mode" value="on_close"/>
      <property name="hibernate.enable_lazy_load_no_trans" value="true"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.jdbc.time_zone" value="UTC"/>
      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/>
    </properties>
  </persistence-unit>
</persistence>

org.hibernate.ejb.HibernatePersistence
java:jboss/datasources/mydb
模型资产
提前感谢您的帮助


编辑:我们在Jboss上也升级了sqljdbc库模块,我们将最后一个sqljdbc42.jar替换为默认的。

当连接被终止时,这些错误为零。它们有时发生在大工作负载、连接闲置一段时间以及发生节流时。由于这种类型的错误以及Azure SQL数据库自然出现的一些暂时性错误,您应该将所有SQL命令包装在重试逻辑上。请在文章中了解有关暂时性错误和重试逻辑的更多信息