我在Openshift V3中运行了WildFly 10吊舱和mysql 5.7吊舱。我想在我的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中的每个环境变量前面加了美元符号,但是还是没有运气...
最佳答案
在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>
注意:我建议在.s2i的环境文件中使用DeploymentConfig环境variables而不是使用静态变量,以便可以将同一源存储库用于不同的Openshift环境/项目/命名空间(dev,test,integration,prod)。
关于mysql - 在openshift上使用mysql服务时替换standalone.xml中的环境变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47653343/