0

WildFly 10 ポッドと mysql 5.7 ポッドを Openshift V3 で実行しています。mysql データソースを構成するために Openshift V2 で使用されていたように、standalone.xml で環境変数を使用したいと考えています。

このガイドに従いました: https://github.com/openshift-s2i/s2i-wildfly

.s2i フォルダーを追加し、そこに環境というファイルを作成しました。

「環境」ファイルに次のキーを追加しました。

MYSQL_DATABASE=<DATABASE_NAME>

もちろん、実際の<DATABASE_NAME>データベース名に置き換えられます。

私のstandalone.xmlには次のものがあります:

<subsystem xmlns="urn:jboss:domain:datasources:4.0">
    <datasources>
        <datasource jta="false" jndi-name="java:/<DATABASE_NAME>" pool-name="pool_name" enabled="true" use-ccm="false">
            <connection-url>jdbc:mysql://MYSQL_SERVICE_HOST:MYSQL_SERVICE_PORT/<DATABASE_NAME>?useSSL=false</connection-url>
            <driver-class>com.mysql.jdbc.Driver</driver-class>
            <driver>mysql</driver>
            <security>
                <user-name>MYSQL_USER</user-name>
                <password>MYSQL_PASSWORD </password>
            </security>
            <validation>
                <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
                <background-validation>true</background-validation>
                <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
            </validation>
        </datasource>
        <drivers>
            <driver name="mysql" module="com.mysql.jdbc">
                <driver-class>com.mysql.jdbc.Driver</driver-class>
            </driver>                    
        </drivers>
    </datasources>
</subsystem>

環境変数を実際の値に置き換えると、mysql 接続が機能し、wildfly が正常に起動します。

私は何を間違っていますか?

また、standalone.xml の各環境変数の前にドル記号を付けましたが、まだうまくいきません...

4

1 に答える 1

1

Openshift (wildfly 用) では、このアプローチを使用して環境変数を使用する必要があります。

${env.DATABASE_NAME}

例えば:

最初に、これらの変数をDeploymentConfigに追加する必要があります。

MYSQL_USER=<mysql_username>
MYSQL_PASSWORD=<mysql_password>

Wildfly のポッドの同じプロジェクト/ naspaceに msyqlという名前のサービスを作成した場合は、この他の 2 つの環境変数の設定をスキップできます。

MYSQL_SERVICE_HOST=<mysql_host>
MYSQL_SERVICE_PORT=<mysql_port>

これは、開始されたすべてのポッドに、それより前に作成された他のサービス(ホスト、ポートなど) の一連の注入された環境変数があるためです。

次に、データソースを構成できます。

<subsystem xmlns="urn:jboss:domain:datasources:4.0">
    <datasources>
        <datasource jta="false" jndi-name="java:/${env.DATABASE_NAME}" pool-name="pool_name" enabled="true" use-ccm="false">
            <connection-url>jdbc:mysql://${env.MYSQL_SERVICE_HOST}:${env.MYSQL_SERVICE_PORT}/<DATABASE_NAME>?useSSL=false</connection-url>
            <driver-class>com.mysql.jdbc.Driver</driver-class>
            <driver>mysql</driver>
            <security>
                <user-name>${env.MYSQL_USER}</user-name>
                <password>${env.MYSQL_PASSWORD}</password>
            </security>
            <validation>
                <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
                <background-validation>true</background-validation>
                <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
            </validation>
        </datasource>
        <drivers>
            <driver name="mysql" module="com.mysql.jdbc">
                <driver-class>com.mysql.jdbc.Driver</driver-class>
            </driver>                    
        </drivers>
    </datasources>
</subsystem>

注: .s2i の環境ファイルで静的変数を使用する代わりに、DeploymentConfig 環境変数を使用することをお勧めします。これにより、異なる Openshift 環境/プロジェクト/名前空間 (dev、test、integration、prod) に同じソース リポジトリを使用できます。

于 2017-12-06T14:05:08.050 に答える