Skip to content

Commit

Permalink
Update React / Spring / MySQL example (#99)
Browse files Browse the repository at this point in the history
* Update README.md title from NodeJS to Spring

Signed-off-by: Friedrich Greiner <greinerfriedrich@gmail.com>

* Always restart spring backend service

Signed-off-by: Friedrich Greiner <greinerfriedrich@gmail.com>

* Also pass db-password secret to spring backend

Signed-off-by: Friedrich Greiner <greinerfriedrich@gmail.com>

* Add healthcheck to the mysql service

 - a start_period of 30s + 15s (interval * retries) should be long enough for mysql to initialize

Signed-off-by: Friedrich Greiner <greinerfriedrich@gmail.com>
  • Loading branch information
frgreiner authored Mar 22, 2021
1 parent a92c067 commit a2cf9cc
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 2 deletions.
2 changes: 1 addition & 1 deletion react-java-mysql/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
## Compose sample application
### React application with a NodeJS backend and a MySQL database
### React application with a Spring backend and a MySQL database

Project structure:
```
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.company.project.configuration;

import java.io.IOException;
import java.nio.charset.Charset;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.util.StreamUtils;

/**
* Read property from docker secret file.
*/
public class DockerSecretsProcessor implements EnvironmentPostProcessor {

@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
Resource resource = new FileSystemResource("/run/secrets/db-password");
if (resource.exists() && System.getProperty("MYSQL_PASSWORD") == null) {
try {
String dbPassword = StreamUtils.copyToString(resource.getInputStream(), Charset.defaultCharset());
System.setProperty("MYSQL_PASSWORD", dbPassword);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
org.springframework.boot.env.EnvironmentPostProcessor=com.company.project.configuration.DockerSecretsProcessor
11 changes: 10 additions & 1 deletion react-java-mysql/docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,28 @@ version: "3.7"
services:
backend:
build: backend
restart: always
secrets:
- db-password
environment:
MYSQL_HOST: db
networks:
- react-spring
- spring-mysql
depends_on:
- db
db:
condition: service_healthy
db:
environment:
MYSQL_DATABASE: example
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db-password
image: mysql:8.0.19
restart: always
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 3s
retries: 5
start_period: 30s
secrets:
- db-password
volumes:
Expand Down

0 comments on commit a2cf9cc

Please sign in to comment.