Partner – Trifork – NPI (cat=Spring Boot)
announcement - icon

Navigating the complexities of Spring can be difficult, even for seasoned developers.

If you need direct, practical help and guidance with your own Spring work, Trifork's CTO, Joris Kuipers, is running a closed-door call.

It's free, but it's limited to only 3 seats, so if you need it, I would join quickly and be sure to attend:

>>> CTO Spring Open Office Hour Session - Technical Guidance

With more than 15 years of leading custom software development projects involving Spring, Joris has gained a lot of real-world experience, and this call is about sharing and helping the community.


Course – LS – All

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:


1. Overview

Previously, we have introduced Ratpack and its integration with Google Guice.

In this quick article, we'll show how Ratpack can be integrated with Spring Boot.

2. Maven Dependency

Before we continue, let's add the following dependency into our pom.xml:


The ratpack-spring-boot-starter pom dependency automatically adds ratpack-spring-boot and spring-boot-starter into our dependencies.

3. Integrating Ratpack With Spring Boot

We can embed Ratpack in Spring Boot as an alternative to servlet containers provided by Tomcat or Undertow. We only need to annotate a Spring configuration class with @EnableRatpack and declare beans of type Action<Chain>:

public class EmbedRatpackApp {

    private Content content;
    private ArticleList list;

    public Action<Chain> home() {
        return chain -> chain.get(ctx -> ctx.render(content.body()));

    public static void main(String[] args) {, args);

For those more familiar with Spring Boot, the Action<Chain> can act as a web filter and/or controller.

When it comes to serving static files, Ratpack registers handlers automatically for static resources under /public and /static in the @Autowired ChainConfigurers.

However, the current implementation of this “magic” depends on our project settings and development environment. So if we are to achieve stable serving of static resources in different environments, we should specify the baseDir explicitly:

public ServerConfig ratpackServerConfig() {
    return ServerConfig

The code above assumes that we have a static folder under classpath. Also, we name the ServerConfig bean to ratpackServerConfig to override the default bean registered in RatpackConfiguration.

Then we can test our application with ratpack-test:

MainClassApplicationUnderTest appUnderTest
  = new MainClassApplicationUnderTest(EmbedRatpackApp.class);

public void whenSayHello_thenGotWelcomeMessage() {
    assertEquals("hello baeldung!", appUnderTest

public void whenRequestList_thenGotArticles()  {
    assertEquals(3, appUnderTest

public void whenRequestStaticResource_thenGotStaticContent() {
      .getText("/"), containsString("page is static"));

4. Integrating Spring Boot With Ratpack

First, we will register required beans in a Spring configuration class:

public class Config {

    public Content content() {
        return () -> "hello baeldung!";

Then we can create a registry easily using the convenience method spring(…) provided by ratpack-spring-boot:

public class EmbedSpringBootApp {

    public static void main(String[] args) throws Exception {
        RatpackServer.start(server -> server
          .handlers(chain -> chain.get(ctx -> ctx.render(ctx

In Ratpack, registries are used for inter-handler communication in request processing. The Context object that we use in handlers implements the Registry interface.

Here, a ListableBeanFactory instance provided by Spring Boot is adapted to a Registry, to back the registry in Handler‘s Context. Thus when we want to get an object of a specific type from Context, the ListableBeanFactory will be used to look up the matching beans.

5. Summary

In this tutorial, we explored how to integrate Spring Boot and Ratpack.

As always, the full implementation is available over on Github.

Course – LS – All

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

res – REST with Spring (eBook) (everywhere)
Comments are closed on this article!