【问题标题】:Replace environment variables in standalone.xml when using a mysql service on openshift在 openshift 上使用 mysql 服务时替换standalone.xml 中的环境变量
【发布时间】:2017-12-05 12:11:26
【问题描述】:

我有一个 WildFly 10 pod 和一个 mysql 5.7 pod 在 Openshift V3 中运行。我想在我的standalone.xml 中使用环境变量,就像我在 Openshift V2 中用于配置我的 mysql 数据源一样。

我遵循了这个指南:https://github.com/openshift-s2i/s2i-wildfly

我添加了一个 .s2i 文件夹并在那里创建了一个名为:环境的文件。

我在“环境”文件中添加了以下键:

MYSQL_DATABASE=<DATABASE_NAME>

&lt;DATABASE_NAME&gt; 当然会替换为真实的数据库名称。

在我的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 中的每个环境变量前面加上了美元符号,但仍然没有运气...

【问题讨论】:

    标签: mysql openshift wildfly-10 openshift-3


    【解决方案1】:

    在 Openshift(用于 wildfly)中,您应该使用这种方法来使用环境变量:

    ${env.DATABASE_NAME}

    例如:

    首先你需要在DeploymentConfig中添加这些变量:

    MYSQL_USER=<mysql_username>
    MYSQL_PASSWORD=<mysql_password>
    

    如果你在 Wildfly 的 pod 的同一个项目/空间中创建了一个名为 msyql 的服务,你可以跳过另外两个环境变量的设置:

    MYSQL_SERVICE_HOST=<mysql_host>
    MYSQL_SERVICE_PORT=<mysql_port>
    

    这是因为每个启动的 pod 都会有一组注入的其他服务的环境变量在它之前创建(如主机、端口等)。

    然后就可以配置数据源了:

    <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>
    

    注意:我建议使用 DeploymentConfig 环境 variables 而不是在 .s2i 的 enviroments 文件中使用静态变量,这样您就可以使用相同的源存储库不同的 Openshift 环境/项目/命名空间(开发、测试、集成、产品)。

    【讨论】:

    • 使用 ${env.XXX} 的解决方案有效。但是,我必须手动添加已经制作的 mysql 环境变量,并手动添加 MYSQL_SERVICE_HOST 的部署配置变量。请在您的回答中澄清这一点,我会接受它作为正确答案;-)
    • 添加了有关 DeploymentConfig 设置和环境变量的更多信息。
    猜你喜欢
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多