クライアント、サーバー、データベースがあります。クライアントは、EJBリモートインターフェイスを介してサーバーと通信します。サーバーとして-Wildfly 8.2.0を使用します。データベースとして-私はMySQLを使用します。サーバーは、JPA/Hibernateを介してMySQLと通信します。 MySQLサーバーをオフにすると、もちろんWildflyは例外をスローします。しかし、MySQLを再びオンにすると、Wildflyは同じ [〜#〜] error [〜#〜] をスローします。 Wildflyをオフにし、Wildflyがデータベースに再接続するように戻す必要があります。
Wildflyで自動再接続を設定する方法は?
接続URLで自動再接続を設定しようとしました:jdbc:mysql://localhost/db?autoReconnect=true&useUnicode=yes&characterEncoding=UTF8
と私が使用するstandalone-full.xmlファイルにこの行を追加しようとしました:<check-valid-connection-sql>select 1</check-valid-connection-sql>
、ただし、両方のソリューションは機能しません。
standalone-full.xml:
<!-- ... -->
<datasource jta="true" jndi-name="Java:jboss/datasources/MySQLDS" pool-name="MySQLDS" enabled="true" use-ccm="true">
<connection-url>jdbc:mysql://localhost/db?autoReconnect=true&amp;useUnicode=yes&amp;characterEncoding=UTF8</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver>mysqlDriver</driver>
<security>
<user-name>user</user-name>
<password>***</password>
</security>
<validation>
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<timeout>
<set-tx-query-timeout>false</set-tx-query-timeout>
<blocking-timeout-millis>0</blocking-timeout-millis>
<idle-timeout-minutes>0</idle-timeout-minutes>
<query-timeout>0</query-timeout>
<use-try-lock>0</use-try-lock>
<allocation-retry>0</allocation-retry>
<allocation-retry-wait-millis>0</allocation-retry-wait-millis>
</timeout>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
<drivers>
<driver name="mysqlDriver" module="com.mysql">
<xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class>
</driver>
</drivers>
<!-- ... -->
Standalone-full.xmlファイルでvalidate-on-match値をtrueに変更することにより、この問題を解決しました。
<validate-on-match>true</validate-on-match>
これはWildfly 8.1で動作します:
<datasource jta="true" jndi-name="Java:jboss/datasources/xxxdb" pool-name="xxxxDB" enabled="true" use-ccm="false">
<connection-url>jdbc:mysql://localhost:3306/xxxdb?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver>mysql-connector-Java-5.1.26-bin.jar</driver>
<security>
<user-name>xxxuser</user-name>
<password>xxxpassword</password>
</security>
<validation>
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<validate-on-match>false</validate-on-match>
<background-validation>true</background-validation>
<background-validation-millis>10000</background-validation-millis>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
<background-validation>
をtrue
に設定すると、このオプションのパフォーマンスが向上するため、<validate-on-match>
をfalse
に設定できます。