1概要

以前は、

Ratpack

とそのリンク:/ratpack-google-guice[Google Guiceとの統合]を導入しました。

このクイック記事では、RatpackをSpring Bootと統合する方法を説明します。


2 Mavenの依存関係

先に進む前に、__pom.xmlに次の依存関係を追加しましょう。

<dependency>
    <groupId>io.ratpack</groupId>
    <artifactId>ratpack-spring-boot-starter</artifactId>
    <version>1.4.6</version>
    <type>pom</type>
</dependency>



ratpack-spring-boot-starter


pom依存関係は自動的にhttps:/を追加します/search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22ratpack-spring-boot%22[

ratpack-spring-boot

]およびhttps://search.maven.org/classic/#search% 7Cga%7C1%7Cg%3A%22org.springframework.boot%22%20AND 20a%3A%22spring-boot-starter%22[

spring-boot-starter

]を依存関係に追加しました。


3 RatpackとSpring Bootの統合

TomcatやUndertowが提供するサーブレットコンテナの代わりにRatpackをSpring Bootに埋め込むことができます。 Spring設定クラスにhttps://ratpack.io/manual/current/api/ratpack/spring/config/EnableRatpack.html[

@EnableRatpack

]という注釈を付け、


Action

<

Chain

>

:

@SpringBootApplication
@EnableRatpack
public class EmbedRatpackApp {

    @Autowired
    private Content content;

    @Autowired
    private ArticleList list;

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

    public static void main(String[]args) {
        SpringApplication.run(EmbedRatpackApp.class, args);
    }
}

Spring Bootに慣れている人は、

Action <Chain>

をWebフィルタやコントローラとして使うことができます。

静的ファイルの提供に関しては、Ratpackは@Autowired

https://github.com/ratpack/ratpack/blob/master/ratpack-spring-boot/srcの


/public



/static

の下に静的リソースのハンドラを自動的に登録します。/main/java/ratpack/spring/config/internal/ChainConfigurers.java#L63[ChainConfigurers]。

ただし、この「魔法のhttps://github.com/ratpack/ratpack/blob/master/ratpack-spring-boot/src/main/java/ratpack/spring/config/RatpackProperties.java#L202[現在の実装]」プロジェクトの設定や開発環境によって異なります。したがって、異なる環境で静的リソースの安定した提供を実現する場合は、

baseDir

を明示的に指定する必要があります。

@Bean
public ServerConfig ratpackServerConfig() {
    return ServerConfig
      .builder()
      .findBaseDir("static")
      .build();
}

上記のコードはクラスパスの下に

static

フォルダがあると仮定しています。



ServerConfig


Beanを

ratpackServerConfig

にも名前を付けます。/blob/master/ratpack-spring-boot/src/main/java/ratpack/spring/config/RatpackConfiguration.java#L70[

RatpackConfiguration

]。

それから、https://search.maven.org/classic/#search%7C1%7Cg%3A%22io.ratpack%22%20AND%20a%3A%22ratpack-test%22[ratpack-テスト]:

MainClassApplicationUnderTest appUnderTest
  = new MainClassApplicationUnderTest(EmbedRatpackApp.class);

@Test
public void whenSayHello__thenGotWelcomeMessage() {
    assertEquals("hello baeldung!", appUnderTest
      .getHttpClient()
      .getText("/hello"));
}

@Test
public void whenRequestList__thenGotArticles()  {
    assertEquals(3, appUnderTest
      .getHttpClient()
      .getText("/list")
      .split(",").length);
}

@Test
public void whenRequestStaticResource__thenGotStaticContent() {
    assertThat(appUnderTest
      .getHttpClient()
      .getText("/"), containsString("page is static"));
}


4 Spring BootとRatpack

の統合

まず、必要なBeanをSpring構成クラスに登録します。

@Configuration
public class Config {

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

それから、便利なメソッドhttps://ratpack.io/manual/current/api/ratpack/spring/Spring.html#spring-java.lang.Class-java.lang.String…​-を使用して簡単にレジストリを作成できます。

ratpack-spring-boot

が提供する[

spring(…​)

]:

public class EmbedSpringBootApp {

    public static void main(String[]args) throws Exception {
        RatpackServer.start(server -> server
          .registry(spring(Config.class))
          .handlers(chain -> chain.get(ctx -> ctx.render(ctx
            .get(Content.class)
            .body()))));
    }
}

Ratpackでは、リクエスト処理におけるハンドラ間通信にレジストリが使用されます。ハンドラーで使用するhttps://ratpack.io/manual/current/api/ratpack/handling/Context.html[

Context

]オブジェクトはhttps://ratpack.io/manual/current/api/ratpack/registryを実装しています。/Registry.html[

Registry

]インターフェース。

ここでは、Spring Bootによって提供されるhttp://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/ListableBeanFactory.html[

ListableBeanFactory

]インスタンスが

Registry

に適応されています

Handler



Context

にあるレジストリをバックアップします。したがって、

Context

から特定の型のオブジェクトを取得したい場合は、

ListableBeanFactory

を使用して一致するBeanを検索します。


5概要

このチュートリアルでは、Spring BootとRatpackを統合する方法を探りました。

いつものように、完全な実装はhttps://github.com/eugenp/tutorials/tree/master/ratpack[over on Github]で利用可能です。