webentwicklung-frage-antwort-db.com.de

Wildfly und automatische Wiederherstellung der Verbindung zur Datenbank

Ich habe einen Client, einen Server und eine Datenbank. Der Client kommuniziert mit dem Server über eine EJB-Remote-Schnittstelle. Als Server verwende ich eine Wildfly 8.2.0. Als Datenbank benutze ich ein MySQL. Der Server kommuniziert mit MySQL über einen JPA/Hibernate. Wenn ich den MySQL-Server ausschalte, löst der Wildfly natürlich eine Ausnahme aus. Aber wenn ich MySQL wieder einschalte, wirft die Wildfly immer noch den gleichen ERROR . Ich muss den Wildfly ausschalten und wieder einschalten, damit der Wildfly wieder eine Verbindung zur Datenbank herstellt.

Wie stelle ich die automatische Wiederverbindung in der Wildfly ein?

Ich habe versucht, die automatische Verbindungswiederherstellung in einer Verbindungs-URL festzulegen: jdbc:mysql://localhost/db?autoReconnect=true&amp;useUnicode=yes&amp;characterEncoding=UTF8 und ich habe versucht, die eigenständige-full.xml-Datei, die ich verwende, hinzuzufügen, diese Zeile: <check-valid-connection-sql>select 1</check-valid-connection-sql>, aber beide Lösungen funktionieren nicht.

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;amp;useUnicode=yes&amp;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>
<!-- ... -->
27
Robert

Ich habe dieses Problem behoben, indem ich in meiner eigenständigen Datei "full.xml" den Wert für "validate on match" in "true" geändert habe:

<validate-on-match>true</validate-on-match>

14
Robert

Diese Arbeit an 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;amp;useUnicode=true&amp;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>
24

Sie können <background-validation> bis true, da diese Option eine bessere Leistung bietet, und stellen Sie <validate-on-match> bis false

3
Alireza Alallah