mysql - Wildfly 和 mysql 数据库之间的编排

标签 mysql docker wildfly

我正在使用 docker-compose 启动 1 个带有 jboss wildfly 10 的容器和另一个带有 mysql 的容器。 如果 mysql 容器需要一些时间才能启动,在这种情况下,wildfly 会给出以下错误:

12:42:35,612 WARN  [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (ServerService Thread Pool -- 61) IJ000604: Throwable while attempting to get a new connection: null: javax.resource.ResourceException: IJ031084: Unable to create connection
...
 Caused by: java.net.UnknownHostException: db
...

wilfly 启动了(有错误):

12:42:40,346 ERROR [org.jboss.as] (Controller Boot Thread) WFLYSRV0026: WildFly Full 10.0.0.Final (WildFly Core 2.0.10.Final) started (with errors) in 14048ms - Started 492 of 818 services (57 services failed or missing dependencies, 383 services are lazy, passive or on-demand)

稍后启动mysql容器时,不会影响wildfly。

我的 docker-compose.yml 是:

api:
    image: eu.gcr.io/jornaloficial-1265/pt.globaleda.jo-api
    environment:
      MYSQL_USER: service
      MYSQL_PASSWORD: service
      MYSQL_DATABASE: api
      MYSQL_HOST: db
    networks:
      - back
  db:
    image: mysql:5.7.11
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - back

我的 api 服务 Dockerfile:

FROM jboss/wildfly:10.0.0.Final
MAINTAINER José Meireles "zmeireles@gmail.com"

ADD mysql-connector-java-5.1.38-bin.jar /opt/jboss/wildfly/modules/system/layers/base/com/mysql/main/
ADD module.xml /opt/jboss/wildfly/modules/system/layers/base/com/mysql/main/
ADD keycloak-wildfly-adapter-dist-1.9.1.Final.tar.gz /opt/jboss/wildfly/
ADD standalone.xml /opt/jboss/wildfly/standalone/configuration/standalone.xml
ADD ato_template.odt /opt/jboss/
RUN mkdir /opt/jboss/pdf-src
RUN mkdir /opt/jboss/pdf-dest
ADD pdf-src /opt/jboss/pdf-src/
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0"]
ADD api.war /opt/jboss/wildfly/standalone/deployments/

以及我的standalone.xml中数据源的配置:

                <datasource jndi-name="java:/mydb" pool-name="my_pool"
                    enabled="true" use-java-context="true">
                    <connection-url>jdbc:mysql://${env.MYSQL_HOST}/${env.MYSQL_DATABASE}?autoReconnect=true&amp;autoReconnectForPools=true&amp;useUnicode=yes&amp;characterEncoding=UTF-8&amp;useSSL=false</connection-url>
                    <driver>mysql</driver>
                    <security>
                        <user-name>${env.MYSQL_USER}</user-name>
                        <password>${env.MYSQL_PASSWORD}</password>
                    </security>
                    <validation>
                        <background-validation>true</background-validation>
                        <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
                        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
                        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
                    </validation>
                </datasource>

重现问题:

docker-compose down
docker-compose up -d api
sleep 10
docker-compose up -d db
docker-compose logs 

Wildfly 是否可以检测数据库何时准备就绪,或者作为替代方案,在数据源子系统退出时失败并​​退出?在后一种情况下,我可以使用一个脚本来循环启动 wildfly

最佳答案

WildFly 的数据源配置提供了验证连接的选项。在管理 GUI 中,选择配置 -> 子系统 -> 数据源 -> 非 XA -> ProcessEngine -> View 。从屏幕上的选项卡中选择“验证”。

点击“编辑”链接。在“检查有效 Sql”框中,输入以下内容:

选择 1

我还选中了“后台验证”框。保存配置(您可能必须先禁用数据源并再次执行此过程和/或者您可能必须重新加载服务器)。

此配置对数据源连接执行持续检查。

您可以做的另一件事是在 Camunda(我认为)中为其数据源设置超时,尽管我不能说这是如何完成的。我觉得还是挺宽容的。

关于mysql - Wildfly 和 mysql 数据库之间的编排,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39491425/

相关文章:

php - 避免在 Kohana 3 的 MySQL 查询中使用 RAND()

mysql - 一次填充MySQL记录一对多关联表

java - 在centos/wildfly docker镜像中查找并更改JAVA_HOME的值

java - Arquillian 和 Wildfly : set timeout for management connection

mysql - MySQL 中何时使用单引号、双引号和反引号

php - 删除 url 末尾的字符

linux - 为什么 "/usr/bin/env bash -x"只能在命令行中工作?

docker - 使用Docker SDK从文件加载图像

docker - 深度探测peer0.org1.example.com :7051 failed: context deadline exceeded

java - JBoss EAP 6 上的 OSGi