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 Actionhome() { 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 .