web-dev-qa-db-fra.com

Wildfly et reconnexion automatique à la base de données

J'ai un client, un serveur et une base de données. Le client communique avec le serveur via une interface distante EJB. En tant que serveur - j'utilise un Wildfly 8.2.0. Comme base de données - j'utilise un MySQL. Le serveur communique avec MySQL via un JPA/Hibernate. Lorsque j'éteins le serveur MySQL - le Wildfly lève une exception, bien sûr. Mais quand je rallume MySQL - le Wildfly lance toujours le même erreur [~ # ~] [~ # ~] . Je dois désactiver le Wildfly et le réactiver pour que le Wildfly se reconnecte à la base de données.

Comment configurer la reconnexion automatique dans le Wildfly?

J'ai essayé de définir la reconnexion automatique dans une URL de connexion: jdbc:mysql://localhost/db?autoReconnect=true&amp;useUnicode=yes&amp;characterEncoding=UTF8 et j'ai essayé d'ajouter au fichier standalone-full.xml que j'utilise, cette ligne: <check-valid-connection-sql>select 1</check-valid-connection-sql>, mais les deux solutions ne fonctionnent pas.

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

J'ai résolu ce problème en modifiant la valeur validate-on-match sur true dans mon fichier standalone-full.xml:

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

14
Robert

Ce travail sur 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

Vous pouvez définir <background-validation> à true, car cette option offre de meilleures performances et définit <validate-on-match> à false

3
Alireza Alallah