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 nativeCompile
then runbuild/native/nativeCompile/spring-kotlin-functional
executable (add.exe
on 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.jar
as documented here - Run the
java
command with-Dspring.aot.enabled=true
, for examplejava -Dspring.aot.enabled=true -cp BOOT-INF/classes:BOOT-INF/lib/* com.example.MyApplication