- Micronaut Test
- Testcontainers
- GraalVM
Description
This example exposes some REST endpoints using JAX-RS annotations and stores data in a MySQL database using Micronaut Data JDBC. Based on: https://guides.micronaut.io/latest/micronaut-jaxrs-jdbc-maven-java.html

Requirements
- JDK 17+
- Docker installed to run MySQL and to run tests using Testcontainers.
Project Structure

application.properties
micronaut.application.name=micronautguide
#tag::datasource[]
datasources.default.db-type=mysql
datasources.default.dialect=MYSQL
datasources.default.driver-class-name=com.mysql.cj.jdbc.Driver
#end::datasource[]
#tag::flyway[]
# <1>
flyway.datasources.default.enabled=true
#end::flyway[]
application-prod.properties
#tag::prod-datasource[]
datasources.default.dialect=MYSQL
datasources.default.driver-class-name=com.mysql.cj.jdbc.Driver
#datasources.default.schema-generate=CREATE_DROP
datasources.default.schema-generate-name=update
#datasources.default.username=${JDBC_USER:root}
#datasources.default.password=${JDBC_PASSWORD:}
datasources.default.username=root
datasources.default.password=******
datasources.default.url=jdbc:mysql://localhost/exampleDB?generateSimpleParameterMetadata=true&zeroDateTimeBehavior=convertToNull&verifyServerCertificate=false&useSSL=false
#end::prod-datasource[]Running & Test local
Testing
./mvnw test
Running
./mvnw mn:run
curl -id '{"name":"Chase", "type":"DOG"}' \
-H "Content-Type: application/json" \
-X POST http://localhost:8080/pets
Running GraalVM
./mvnw package -Dpackaging=native-imageRunning executable:
./target/default-01http://localhost:8080/pets
Running & Test prod
Set environment variable:MICRONAUT_ENVIRONMENTS=prod
It triggers: (application-prod.properties)
#tag::prod-datasource[]
datasources.default.dialect=MYSQL
datasources.default.driver-class-name=com.mysql.cj.jdbc.Driver
#datasources.default.schema-generate=CREATE_DROP
datasources.default.schema-generate-name=update
#datasources.default.username=${JDBC_USER:root}
#datasources.default.password=${JDBC_PASSWORD:}
datasources.default.username=root
datasources.default.password=******
datasources.default.url=jdbc:mysql://localhost/exampleDB?generateSimpleParameterMetadata=true&zeroDateTimeBehavior=convertToNull&verifyServerCertificate=false&useSSL=false
#end::prod-datasource[]Testing
Make: exampleDB
./mvnw test
The test also gives:

Running
./mvnw mn:run
__ __ _ _
| \/ (_) ___ _ __ ___ _ __ __ _ _ _| |_
| |\/| | |/ __| '__/ _ \| '_ \ / _` | | | | __|
| | | | | (__| | | (_) | | | | (_| | |_| | |_
|_| |_|_|\___|_| \___/|_| |_|\__,_|\__,_|\__|
15:24:39.456 [main] INFO i.m.c.DefaultApplicationContext$RuntimeConfiguredEnvironment - Established active environments: [prod]
15:24:40.176 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
15:24:40.315 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@1f1cae23
15:24:40.320 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
15:24:40.390 [main] INFO i.m.flyway.AbstractFlywayMigration - Running migrations for database with qualifier [default]
15:24:40.437 [main] INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:mysql://localhost/exampleDB (MySQL 8.0)
15:24:40.485 [main] INFO o.f.core.internal.command.DbValidate - Successfully validated 1 migration (execution time 00:00.025s)
15:24:40.501 [main] INFO o.f.core.internal.command.DbMigrate - Current version of schema `exampleDB`: 1
15:24:40.503 [main] INFO o.f.core.internal.command.DbMigrate - Schema `exampleDB` is up to date. No migration necessary.
15:24:40.887 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 1707ms. Server Running: http://localhost:8080
curl -id '{"name":"name#1", "type":"DOG"}' \
-H "Content-Type: application/json" \
-X POST http://localhost:8080/pets
DB:

–
