Skip to content

jonas-tm/ktor-graalvm-server-example

Repository files navigation

Ktor GraalVM Server Example

This repository contains an example project to build a ktor jvm server with GraalVM native-image.

Features

  • JSON Rest API (/api/v1/news)
  • Exposed DB persistence
  • H2 in-memory database
  • Micrometer + Prometheus monitoring
  • Automatic error handling
  • CallID plugin
  • Custom Logging Middleware (Ktor Application Plugin)

Required

  • Linux/MacOS
  • GraalVM installed and set as environment variable JAVA_HOME (sdkman easiest variant)
  • native-image installed (use gu) and reachable

Build & Run native image

  • Directly run with ./gradlew nativeRun
  • Compile
    • ./gradlew nativeCompile
    • Run with ./graal-server
  • Use option --native-quick-build or evironment variable GRAALVM_QUICK_BUILD=true for faster builds

Docker Image (not tested!)

  • Use Dockerfile for multistage native-image build.
  • Results image is minmal size based of scratch

Known Issues

  • Micrometer not working correct on native
  • Serialization is not working for native-image out of the box
    • Follow this GitHub Issue for progress
    • Somewhat workaround: Analyze reflection by running Jar with tracing mode
      • Run with tracing ./gradlew -Pagent run
        • Try to test all possible paths (also possible via running tests)
      • Copy tracing config ./gradlew metadataCopy --task run --dir src/main/resources/META-INF/native-image

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published