Test-System für eine Spring Boot Applikation auf Google App Engine einrichten
In einem aktuellen Projekt, in dem wir mit unserer individuellen Software-Lösung den Produktions-Prozess unseres Kunden unterstützen, ging es darum, eine Test- bzw. Staging-Umgebung für eine Spring Boot Applikation innerhalb der Google App Engine aufzusetzen.
Wir haben hierzu folgende Schritte durchgeführt:
- Anlegen einer eigenständigen Datenbank in Google Cloud SQL for MySQL
- Anlegen einer appengine-web.xml speziell für die Staging Umgebung
- Über das Attribut <service>...</service> wird der Name des neuen Service festgelegt
- Über das Property spring.profiles.active wird das Spring-Boot-Profil definiert -> über dieses Profil wird die Test- bzw. Staging Datenbank konfiguriert
- Erstellen eines Windows-10 Batches der die Dateien umbenennt, den Staging-Build ausführt und dann wieder die Dateien für das produktive System zurückholt.
Das Staging-System ist dann über eine eigenständige URL aufrufbar, die sich folgendermaßen zusammensetzt: https://[service-name]-dot-[projekt-name].ey.r.appspot.com/
appengine-web.xml
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<version>1</version>
<service>proj-dev-test</service>
<threadsafe>true</threadsafe>
<runtime>java8</runtime>
<instance-class>B4</instance-class>
<manual-scaling>
<instances>1</instances>
</manual-scaling>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties"/>
<property name="file.encoding" value="UTF-8" />
<property name="DEFAULT_ENCODING" value="UTF-8" />
<property name="appengine.file.encoding" value="UTF-8"/>
<property name="spring.profiles.active" value="gcp--dev" />
</system-properties>
</appengine-web-app>
application-gcp--dev.properties
spring.datasource.url = jdbc:mysql://google/dev_db?cloudSqlInstance=exensio&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false
spring.datasource.username=xxxx
spring.datasource.password=xxxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto=validate
# Logging JSON payload in REST api calls
logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG
# Get HTTP request method like HTTP GET and returned HTTP Code
logging.level.org.springframework.web.servlet.DispatcherServlet=TRACE
# Remove stacktrace form JSON response
server.error.include-stacktrace=never
deploy_gcp_dev.bat
move src\main\webapp\WEB-INF\appengine-web.xml src\main\webapp\WEB-INF\appengine-web.xml.bak
move ..\vuejs\src\assets\logo.png ..\vuejs\src\assets\logo.png.bak
copy src\main\resources\assets\google-app-engine-dev\appengine-web.xml src\main\webapp\WEB-INF
copy src\main\resources\assets\google-app-engine-dev\logo.png ..\vuejs\src\assets
call gradlew clean buildVueJs appengineDeploy
move src\main\webapp\WEB-INF\appengine-web.xml.bak src\main\webapp\WEB-INF\appengine-web.xml
move ..\vuejs\src\assets\logo.png.bak ..\vuejs\src\assets\logo.png