Spring-Fans aufgepasst!

Spring Fu: Neues Microframework von Spring

Katharina Degenmann

© Shutterstock / ComicVector703

Das Spring-Team hat ein neues, auf Kotlin basierendes Microframework entwickelt. Spring Fu soll einen einfacheren Aufbau von schnellen, reaktiven Kotlin-basierten Microservices ermöglichen. Dazu werden Kofu und Jafu, zwei neue domänenspezifische Sprachen verwendet.
 

Spring Fu ist ein neues, experimentelles Projekt mit dem Ziel, ein neues API zu entwickeln, um Spring-Anwendungen mit einer Kotlin DSL sowie funktionaler Konfiguration zu konfigurieren. Es dient als Inkubator für neue Spring-Features für Kotlin und funktionale Registrierung sogenannter Beans. Aktuell wird bei Spring Fu an der Unterstützung von Coroutines für Spring WebFlux und Spring Data gearbeitet. Damit soll sich der Spring Reactive Stack imperativer in etwas imperativerer Weise nutzen lassen.

Kotlin + Functional = Kofu

Der Fokus von Spring Fu liegt auf der Konfigurierung von Spring-Boot-Anwendungen via Kotlin DSL und Lambdas, anstelle von Annotationen. Die Kotlin DSL basiert im Falle von Spring Fu auf der Spring-Boot-Infrastruktur und wird Kofu genannt. Kofu steht hier für Kotlin und functional. Eine typische Spring-Boot-Anwendung, die via Kofu konfiguriert ist, sieht so aus:

val app = application {
  import(beans)
  listener {
    ref().init()
  }
  properties("sample")
  server {
    port = if (profiles.contains("test")) 8181 else 8080
    mustache()
    codecs {
      string()
      jackson {
        indentOutput = true
      }
    }
    import(::routes)
  }
  mongodb {
    embedded()
  }
}

val beans = beans {
  bean()
  bean()
}

fun routes(userHandler: UserHandler) = router {
  GET("/", userHandler::listView)
  GET("/api/user", userHandler::listApi)
  GET("/conf", userHandler::conf)
}

fun main() = app.run()

Um Spring Fu nutzen zu können, muss vorab die Abhängigkeit org.springframework.fu:spring-boot-kofu zur Spring-Boot-Anwendung hinzugefügt werden, Spring Boot 2.1 ist Voraussetzung. Allerdings sei das API aktuell noch nicht stabil, damit auch nicht für die Produktion geeignet und der Umfang der Teilmenge, die von Spring Boot unterstützt wird, sei beschränkt.

Jafu-Konfiguration

Neben Kofu steht auch eine Variante für Java zur Verfügung. Jafu, abgeleitet aus Java und functional, ist das Java-Äquivalent zu Kofu und basiert ebenfalls auf einem DSL-Ansatz. 

public class JafuApplication {

  public static SpringApplication app = application(app -> {
    app.beans(beans -> {
      beans.bean(SampleService.class);
      beans.bean(SampleHandler.class);
    });
    app.server(server -> server.router(router -> {
      SampleHandler sampleHandler = app.ref(SampleHandler.class);
      router.GET("/", sampleHandler::hello);
      router.resources("/**", new ClassPathResource("static/"));
    }));
  });

  public static void main (String[] args) {
    app.run(args);
  }
}

Derzeit ist Jafu lediglich ein POC (Proof of Concept), doch wie das Spring-Team ankündigt, werde am Status von Jafu gearbeitet.

Was Spring Fu außerdem kann

Neben den Kofu- und Jafu-Konfigurationen, verfügt Spring Fu unter anderem über die Unterstützung für Images, die auf der GraalVM basieren und auch Koroutinen werden unterstützt. Besonders in Verbindung mit Oracles GraalVM zeigt Spring Fu, was es kann. Einige Kleinigkeiten müssen noch optimiert werden, aber es ist jetzt schon möglich, eine reaktive Spring-Boot-Anwendung mit einer Kofu-Konfiguration als natives Executable zu kompilieren. Wie schnell das geht, zeigt Toshiaki Makis Experiment eindrucksvoll:

Alle Einzelheiten zu Spring Fu und weitere Features können Interessierte auf GitHub und auf dem Blog von Spring nachlesen.

Geschrieben von
Katharina Degenmann
Katharina Degenmann
Katharina Degenmann hat Politikwissenschaft und Philosophie studiert. Seit Februar 2018 arbeitet sie in der Redaktion der Software & Support Media GmbH und ist nebenbei als freie Journalistin tätig.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: