在openshift上使用mysql服务时,替换standalone.xml中的环境变量

时间:2017-12-05 12:11:26

标签: mysql openshift wildfly-10 openshift-3

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

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

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

的文件

我在'环境'文件中添加了以下密钥:

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中为每个环境变量添加了美元符号,但仍然没有运气......

1 个答案:

答案 0 :(得分:1)

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

api.items(queryParam) // Flowable<Item> .parallel(10) .runOn(Schedulers.io()) .map(item -> api2.extendedInfo(item.id())) .sequential(); // Flowable<ItemExtended>

例如:

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

${env.DATABASE_NAME}

如果您在Wildfly's pod的同一项目/鼻腔中创建了名为 msyql 的服务,则可以跳过其他两个环境变量的设置:

MYSQL_USER=<mysql_username>
MYSQL_PASSWORD=<mysql_password>

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

然后您可以配置数据源:

MYSQL_SERVICE_HOST=<mysql_host>
MYSQL_SERVICE_PORT=<mysql_port>

注意:我建议使用DeploymentConfig环境variables,而不是在.s2i的环境文件中使用静态变量,这样您就可以使用相同的源代码不同的Openshift环境/项目/命名空间(dev,test,integration,prod)的存储库。