This project is designed to demonstrate:
- Spring Framework Kotlin support
- Spring MVC functional web APIs
- Leveraging Kotlin serialization
- Gradle Kotlin DSL configuration
- Spring Boot GraalVM native images support
This sample does not use functional bean registration for 3 main reasons:
- This is not yet well supporting with native/AOT, see spring-framework#29555 related issue.
- Spring Fu development is frozen while the Spring team figures out a better option to provide first class support for functional configuration well integrated in Spring Boot, see spring-boot#8115 related issue.
- Spring AOT transforms automatically annotation-based JavaConfig configuration model to functional bean registration executed at runtime.
- Build the project and run tests with
./gradlew build - Run the application with
./gradlew bootRun - Create a native executable with
./gradlew nativeCompilethen runbuild/native/nativeCompile/spring-kotlin-functionalexecutable (add.exeon Windows) - Build an optimized native container with
./gradlew bootBuildImage
AOT generation happens when either id("org.graalvm.buildtools.native") or id("org.springframework.boot.aot") plugins are activated.
If you want to leverage to speedup the application startup on the JVM:
- Unpack the executable JAR with
jar -xf myapp.jaras documented here - Run the
javacommand with-Dspring.aot.enabled=true, for examplejava -Dspring.aot.enabled=true -cp BOOT-INF/classes:BOOT-INF/lib/* com.example.MyApplication