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