Рубрики
Без рубрики

Интеграция Ratpack с весенней загрузкой

Быстрое и практическое введение в интеграцию Ratpack Spring Boot.

Автор оригинала: baeldung.

1. Обзор

Ранее мы представили Ratpack и его интеграцию с Google Guice .

В этой быстрой статье мы покажем, как Ratpack может быть интегрирован с Spring Boot.

2. Зависимость от Maven

Прежде чем мы продолжим, давайте добавим следующую зависимость в нашу пом.xml:


    io.ratpack
    ratpack-spring-boot-starter
    1.4.6
    pom

крыса-весна-загрузка-стартер pom зависимость автоматически добавляет крыса-весна-загрузка и весна-загрузка-стартер в наши зависимости.

3. Интеграция Крысиный ранец с весенней загрузки

Мы можем встроить Ratpack в весеннюю загрузку в качестве альтернативы сервлет контейнеров, предоставляемых Tomcat или Undertow. Нам нужно только аннотировать класс конфигурации Spring с @EnableRatpack и объявить бобы типа Действие < цепь > :

@SpringBootApplication
@EnableRatpack
public class EmbedRatpackApp {

    @Autowired 
    private Content content;
 
    @Autowired 
    private ArticleList list;

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

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

Для тех, кто больше знаком с Spring Boot, Действия могут выступать в качестве веб-фильтра и/или контроллера.

Когда дело доходит до обслуживания статических файлов, Ratpack регистрирует обработчики автоматически для статических ресурсов под /общественный и /статический в @Autowired ЦепьКонфигурки .

Тем не менее, текущая реализация этой «магии» зависит от настроек нашего проекта и среды разработки. Поэтому, если мы хотим достичь стабильного обслуживания статических ресурсов в различных средах, мы должны указать базаДир явно:

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

Вышеупомянутый код предполагает, что у нас есть статические папка под классной симпатией. Также мы назовем СерверКонфиг фасоль к ratpackServerConfig переопределить фасоль по умолчанию, зарегистрированную в 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. Интеграция весенней загрузки с Ratpack

Во-первых, мы зарегистрируем необходимые бобы в классе конфигурации Spring:

@Configuration
public class Config {

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

Затем мы можем создать реестр легко, используя метод удобства весна (…) предоставлено крыса-весна-загрузка :

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 реестры используются для межобрабатывающей связи при обработке запросов. Контекст объект, который мы используем в обработчиках, реализует Реестр интерфейс.

Вот, СписокBeanFactory экземпляр, предоставленный Spring Boot, адаптирован к Реестр , чтобы поддержать реестр в Обработчик ‘ы Контекст . Таким образом, когда мы хотим получить объект определенного типа от Контекст , СписокBeanFactory будет использоваться для выглядеть соответствующие бобы.

5. Резюме

В этом учебнике мы исследовали, как интегрировать Spring Boot и Ratpack.

Как всегда, полная реализация доступна более на Github .