在 openshift 上使用 mysql 服务时替换 standalone.xml 中的环境变量
Replace environment variables in standalone.xml when using a mysql service on openshift
我在 Openshift V3 中有一个 WildFly 10 pod 和一个 mysql 5.7 pod 运行。我想在我的 standalone.xml 中使用环境变量,因为我在 Openshift V2 中使用它来配置我的 mysql 数据源。
我遵循了这个指南:https://github.com/openshift-s2i/s2i-wildfly
我添加了一个 .s2i 文件夹并在那里创建了一个名为:environment 的文件。
我在 '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 的同一个 project/naspace 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,因此您可以为不同的 Openshift environments/projects/namespaces(开发、测试、集成、生产)使用相同的源存储库。
我在 Openshift V3 中有一个 WildFly 10 pod 和一个 mysql 5.7 pod 运行。我想在我的 standalone.xml 中使用环境变量,因为我在 Openshift V2 中使用它来配置我的 mysql 数据源。
我遵循了这个指南:https://github.com/openshift-s2i/s2i-wildfly
我添加了一个 .s2i 文件夹并在那里创建了一个名为:environment 的文件。
我在 '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 的同一个 project/naspace 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,因此您可以为不同的 Openshift environments/projects/namespaces(开发、测试、集成、生产)使用相同的源存储库。