java - comandos - clusvcadm
Wildfly y auto reconexión a la base de datos. (3)
Este trabajo en 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>
Tengo un cliente, un servidor y una base de datos. El cliente se comunica con el servidor a través de interfaces remotas EJB. Como servidor, uso un Wildfly 8.2.0. Como la base de datos - uso un MySQL. El servidor se comunica con MySQL a través de un JPA / Hibernate. Cuando apago el servidor MySQL, Wildfly lanza una excepción, por supuesto. Pero cuando vuelvo a encender MySQL, la Wildfly sigue arrojando el mismo ERROR . Tengo que apagar la Wildfly y devolverle la conexión para que la Wildfly vuelva a conectarse a la base de datos.
¿Cómo configurar la reconexión automática en el Wildfly?
Intenté establecer la reconexión automática en una URL de conexión: jdbc:mysql://localhost/db?autoReconnect=true&useUnicode=yes&characterEncoding=UTF8
y traté de agregar al archivo standalone-full.xml que utilizo, esto línea: <check-valid-connection-sql>select 1</check-valid-connection-sql>
, pero ambas soluciones no funcionan.
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>
<!-- ... -->
Puede establecer <background-validation>
en true
, porque esta opción tiene un mejor rendimiento y establecer <validate-on-match>
en false
Resolví este problema cambiando el valor de validar en coincidencia a verdadero en mi archivo standalone-full.xml:
<validate-on-match>true</validate-on-match>