【问题标题】:Use environment variables in wildlfy datasource definition (file)在 Wildfly 数据源定义(文件)中使用环境变量
【发布时间】:2020-09-30 11:14:01
【问题描述】:

我想将我的 WAR 应用程序重新打包为自包含 docker-image - 目前仍以 war 的形式部署到 wildfly 19。 因为我不想让数据库密码和/或 URL 成为 docker 映像的一部分,所以我希望它可以从外部配置 - 作为环境变量。

因此,我当前的 docker 映像包含一个 Wildfly 数据源定义为 -ds.xml 文件,并带有 env 占位符,因为根据

和其他来源,这应该是可能的。

我的 DS 文件是

<datasources xmlns="http://www.jboss.org/ironjacamar/schema">
    <datasource jndi-name="java:jboss/datasources/dbtDS" pool-name="benchmarkDS">
        <driver>dbt-datasource.ear_com.mysql.jdbc.Driver_5_1</driver>
        <connection-url>${DB_CONNECTION_URL,env.DB_CONNECTION_URL}</connection-url>
        <security>
            <user-name>${DB_USERNAME,env.DB_USERNAME}</user-name>
            <password>${DB_PASSWORD,env.DB_PASSWORD}</password>
        </security>

        <pool>[...]</pool>
    </datasource>
</datasources>

但是启动 docker 容器总是导致无法识别环境变量:

11:00:38,790 WARN  [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (JCA PoolFiller) IJ000610: Unable to fill pool: java:jboss/datasources/dbtDS: javax.resource.ResourceException: IJ031084: Unable to create connection
        at org.jboss.ironjacamar.jdbcadapters@1.4.22.Final//org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:345)
       [...]
Caused by: javax.resource.ResourceException: IJ031083: Wrong driver class [com.mysql.jdbc.Driver] for this connection URL []
        at org.jboss.ironjacamar.jdbcadapters@1.4.22.Final//org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:323)

最后一行说,DS_CONNECTION_URL 似乎是空的 - 尝试了几种组合 - 相信我。

Wrong driver class [com.mysql.jdbc.Driver] for this connection URL []

我正在启动我的容器

docker run --name="dbt" --rm -it -p 8080:8080 -p 9990:9990     -e DB_CONNECTION_URL="jdbc:mysql://127.0.0.1:13306/dbt?serverTimezone=UTC"     -e DB_USERNAME="dbt"     -e DB_PASSWORD="_dbt" dbt

我什至将standalone.sh 修改为输出环境和DB_CONNECTION_URL IS

=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /opt/jboss/wildfly

  JAVA: /usr/lib/jvm/java/bin/java

  DB_CONNECTION_URL: jdbc:mysql://127.0.0.1:13306/dbt?serverTimezone=UTC     JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true  --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED

=========================================================================

11:00:34,362 INFO  [org.jboss.modules] (main) JBoss Modules version 1.10.1.Final
11:00:34,854 INFO  [org.jboss.msc] (main) JBoss MSC version 1.4.11.Final
11:00:34,863 INFO  [org.jboss.threads] (main) JBoss Threads version 2.3.3.Final
[...]

那么我做错了什么让 wildfly 替换我的 DS 文件中的占位符? 它们似乎已被处理 - 因为它们评估为空。但它们应该包含一些东西......

任何建议表示赞赏。

当前的 Dockerfile

[...] building step above [...]

FROM jboss/wildfly:20.0.1.Final
USER root
RUN yum -y install zip wget && yum clean all

RUN sed -i 's/echo "  JAVA_OPTS/echo "  DB_CONNECTION_URL: $DB_CONNECTION_URL     JAVA_OPTS/g' /opt/jboss/wildfly/bin/standalone.sh && \
    cat /opt/jboss/wildfly/bin/standalone.sh
RUN sed -i 's/<spec-descriptor-property-replacement>false<\/spec-descriptor-property-replacement>/<spec-descriptor-property-replacement>true<\/spec-descriptor-property-replacement><jboss-descriptor-property-replacement>true<\/jboss-descriptor-property-replacement><annotation-property-replacement>true<\/annotation-property-replacement>/g' /opt/jboss/wildfly/standalone/configuration/standalone.xml


USER jboss
COPY --from=0 /_build/dbt-datasource.ear /opt/jboss/wildfly/standalone/deployments/
ADD target/dbt.war /opt/jboss/wildfly/standalone/deployments/

【问题讨论】:

    标签: docker jboss environment-variables wildfly datasource


    【解决方案1】:

    回答我自己-也许以后知道别人会很高兴:

    不支持-ds.xml 文件中的占位符(!)。

    我通过修补sedstandalone.xml 中添加了相同的datasource 定义,现在它或多或少地无需进一步修改即可工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      相关资源
      最近更新 更多