When setting up a Wildfly server, it is possible to use environment variables in the standalone.xml file by using the Bean Shell expression.
See the following example which sets up the database, user and password in a database configuration in the standalone.xml file by accessing environment variables:
<datasource jta="true" jndi-name="java:/jdbc/my_datasource" pool-name="my_pool" enabled="true" use-ccm="true">
<connection-url>${env.POSTGRES_CONNECTION}</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<driver>postgresql</driver>
<security>
<user-name>${env.POSTGRES_USER}</user-name>
<password>${env.POSTGRES_PASSWORD}</password>
</security>
</datasource>
With the Bean Shell expression it is not necessary to turning parameters into System Properties: just use the expression:
${env.SYSTEM_ENVIRONMENT_VAR}
Especially when running wildfly in a docker container, this can be very helpful, because you can pass through environment variables to the container:
docker run --name="wildfly" -d -p 8080:8080 -p 9990:9990 \
-e WILDFLY_PASS="admin_password" \
-e POSTGRES_USER="my-postgres-user" \
-e POSTGRES_PASSWORD="mypassword" \
-e POSTGRES_CONNECTION="jdbc:postgresql://postgres/mydb" \
imixs/wildfly
Also in combination with docker-compose environment variables can be set in the docker-compose.yml file. See the next example of a docker-compose.yml file, which sets up a postgres service and a wildfly service with a connection pool configuration as defined before in the standalone.xml:
postgres:
image: postgres:9.6.1
environment:
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydb
mywildflyservice:
image: imixs/mywildfly
environment:
POSTGRES_USER: "my-postgres-user"
POSTGRES_PASSWORD: "mypassword"
POSTGRES_CONNECTION: "jdbc:postgresql://postgres/mydb"
ports:
- "8080:8080"
- "9990:9990"
- "8787:8787"
links:
- postgres:postgres
This is an example, which we use in combination with the wildfly docker container provided by the Imixs-Workflow project.