programing

Wildfly 및 자동으로 데이터베이스에 다시 연결

javamemo 2023. 11. 6. 21:35
반응형

Wildfly 및 자동으로 데이터베이스에 다시 연결

고객과 서버 그리고 데이터베이스가 있습니다.클라이언트는 EJB 원격 인터페이스를 통해 서버와 통신합니다.서버로서 - Wildfly 8.2.0을 사용합니다.데이터베이스로서 - MySQL을 사용합니다.서버는 JPA/Hibernate를 통해 MySQL과 통신합니다.MySQL 서버를 끄면 당연히 와일드플라이는 예외를 던집니다.그러나 MySQL을 다시 켜면 Wildfly는 여전히 동일한 오류를 발생시킵니다.와일드플라이를 끄고 다시 데이터베이스에 연결하라고 돌려놔야 합니다.

와일드플라이에서 자동 재접속을 설정하는 방법?

연결 URL에 자동 재연결을 설정하려고 했습니다.jdbc:mysql://localhost/db?autoReconnect=true&amp;useUnicode=yes&amp;characterEncoding=UTF8그리고 사용하는 standalone-full.xml 파일에 다음 줄을 추가하려고 했습니다.<check-valid-connection-sql>select 1</check-valid-connection-sql>, 하지만 두 가지 해결책 모두 효과가 없습니다.

독립 실행형-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>
<!-- ... -->

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>

독립 실행형-full.xml 파일에서 일치 확인 값을 true로 변경하여 이 문제를 해결했습니다.

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

설정 가능합니다.<background-validation>로.true, 왜냐하면 이 옵션은 더 좋은 성능과 세트를 가지고 있기 때문입니다.<validate-on-match>로.false

언급URL : https://stackoverflow.com/questions/28707650/wildfly-and-auto-reconnect-to-the-database

반응형