【问题标题】:Wildfly and auto reconnect to the databaseWildfly 和自动重新连接到数据库
【发布时间】:2015-04-26 18:37:03
【问题描述】:

我有一个客户端、一个服务器和一个数据库。客户端通过 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>,但两种解决方案都不起作用。

独立完整的.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>
<!-- ... -->

【问题讨论】:

    标签: java mysql jboss ejb wildfly


    【解决方案1】:

    这适用于 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>
    

    【讨论】:

    • 我们正在使用 Oracle 数据库,但无法使用此解决方案,您能否建议对 oracle 需要做什么。
    • 对于 oracle,语句应该是“select 1 from dual”
    【解决方案2】:

    我通过在我的standalone-full.xml 文件中将 validate-on-match 值更改为 true 解决了这个问题:

    &lt;validate-on-match&gt;true&lt;/validate-on-match&gt;

    【讨论】:

    • 这会启用旧行为。来自文档:(docs.jboss.org/jbossas/docs/Server_Configuration_Guide/beta500/…) - 在 JBoss 4.0.5 之前,当 JCA 层尝试匹配托管连接时发生连接验证。随着 的添加,这不再是必需的。指定 会强制执行旧行为。注意:这通常不与 一起使用
    • 您可能是对的@dometec,但我可以确认在 Wildfly 10 上您需要 validate-on-match true 否则如果您退回 MySQL,Wildfly 将永远不会成功重新连接到连接池。我已经尝试过后台验证,但它不起作用。我认为这是一个错误。
    • 设置 background-validation 只有在我设置了 background-validation-millis 之后才对我有用,就像@dometec 的回答一样。 Wildfly 10.1 和 SqlServer 在这里。
    【解决方案3】:

    您可以将&lt;background-validation&gt;设置为true,因为该选项性能更好,将&lt;validate-on-match&gt;设置为false

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 2017-09-05
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多