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

Введение в Bootique

Смотрите обзор Bootique – легкой основы для создания масштабируемых микроуправлений нового поколения.

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

1. Обзор

Bootique является очень легким открытым исходным кодом контейнер-менее Структура СПМ направлена на создание масштабируемых микроуровн нового поколения. Он построен поверх встроенного сервера Jetty и полностью поддерживает REST обработчики с джакс-rs .

В этой статье мы покажем, как создать простое веб-приложение с помощью Bootique .

2. Мейвен зависимостей

Давайте начнем использовать Bootique добавив следующую зависимость в пом.xml:


    io.bootique.jersey
    bootique-jersey
    compile


    io.bootique
    bootique-test
    test

Тем не менее, Bootique также требует объявления нескольких BOM (“Билль материала”) Импорт. Вот почему после раздел должен быть добавлен в pom.xml:


    
        
            io.bootique.bom
            bootique-bom
            0.23
            pom
            import
        
    

Последняя версия Bootique доступен в Центральный maven Репозиторий .

Чтобы построить погоню банку, Bootique полагается на Maven-тени-плагин . Вот почему мы также должны добавить ниже конфигурации, а также:


    
        
            org.apache.maven.plugins
            maven-shade-plugin
        
    

3. Запуск приложения

Самый простой способ начать Bootique приложение для вызова Bootique ‘ы exec () метод из основного метода:

public class App {
    public static void main(String[] args) {
        Bootique.app(args)
          .autoLoadModules()
          .exec();
    }
}

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

NAME
      com.baeldung.bootique.App

OPTIONS
      -c yaml_location, --config=yaml_location
           Specifies YAML config location, which can be a file path 
           or a URL.

      -h, --help
           Prints this message.

      -H, --help-config
           Prints information about application modules and their 
           configuration options.

      -s, --server
           Starts Jetty server.

Это не что иное, доступные аргументы программы, которая поставляется предварительно в комплекте с Bootique .

Имена будут понятны; следовательно, чтобы начать сервер, мы должны пройти либо -s или -серверные аргумент и сервер будет запущен на порт по умолчанию 8080 .

4. Модули

Bootique заявки принимаются с коллекциями “модулей”. В Bootique Термин “Модуль – это библиотека Java, которая содержит некоторый код” что означает, что он рассматривает каждую услугу как модуль. Он использует Google Guice для инъекций зависимости.

Чтобы увидеть, как это работает, давайте создадим один интерфейс:

public interface HelloService {
    boolean save();
}

Теперь нам нужно создать реализацию:

public class HelloServiceImpl implements HelloService {
 
    @Override
    public boolean save() {
        return true;
    }
}

Есть два способа, с помощью которых мы можем загрузить модуль. Во-первых, использовать Гойс ‘ы Модуль интерфейс, а другой с помощью Bootique ‘ы БЗМодулеПровидер который также известен как автозагрузка .

4.1. Модуль Guice

Здесь мы можем использовать Гойс ‘ы Модуль интерфейс для связывания экземпляров:

public class ModuleBinder implements Module {
 
    @Override
    public void configure(Binder binder) {
        binder
          .bind(HelloService.class)
          .to(HelloServiceImpl.class);
    }
}

После того, как модуль определен, мы должны сопоставить этот пользовательский модуль с Bootique пример:

Bootique
  .app(args)
    .module(module)
    .module(ModuleBinder.class)
  .autoLoadModules()
  .exec();

4.2. B’ModuleProvider (автоматическая загрузка)

Здесь все, что нам нужно сделать, это определить ранее созданный модуль-связующего с БЗМодулеПровидер :

public class ModuleProvider implements BQModuleProvider {
 
    @Override
    public Module module() {
        return new ModuleBinder();
    }
}

Преимущество этого метода заключается в том, что нам не нужно Бутик пример.

Нам просто нужно создать файл в /ресурсы/META-INF/services/io.bootique.B’ModuleProvider и написать полное название МодульПровиндер включая название пакета и Bootique будет заботиться об остальном:

com.baeldung.bootique.module.ModuleProvider

Теперь мы можем использовать @Inject аннотация для использования экземпляров службы во время выполнения:

@Inject
HelloService helloService;

Одна важная вещь, чтобы отметить здесь, что, поскольку мы используем Bootique ‘S собственный механизм DI, мы не должны использовать Гойс @ImplementedBy аннотация для связывания экземпляров службы.

5. Конечная точка REST

Создать конечные точки REST с помощью JAX-RS API очень просто:

@Path("/")
public class IndexController {
 
    @GET
    public String index() {
        return "Hello, baeldung!";
    }
 
    @POST
    public String save() {
        return "Data Saved!";
    }
}

Чтобы сопоставить конечные точки в Bootique Собственные Джерси например, мы должны определить ДжерсиМодул :

Module module = binder -> JerseyModule
  .extend(binder)
  .addResource(IndexController.class);

6. Конфигурация

Мы можем предоставить встроенные или пользовательские сведения о конфигурации в файле свойств на основе YAML.

Например, если мы хотим начать приложение в пользовательском порту и добавить контекст URI по умолчанию ‘привет’, мы можем использовать следующую конфигурацию YAML:

jetty:
    context: /hello
    connector:
        port: 10001

Теперь, при запуске приложения, мы должны предоставить местоположение этого файла в параметре config:

--config=/home/baeldung/bootique/config.yml

7. Лесозаготовка

Нестандартная Bootique поставляется с bootique-logback модуль. Чтобы использовать этот модуль, нам нужно добавить следующую зависимость в пом.xml :


    io.bootique.logback
    bootique-logback

Этот модуль поставляется с БутЛоггер интерфейс с нами может переопределить для реализации пользовательских журналов:

Bootique.app(args)
  .module(module)
  .module(ModuleBinder.class)
    .bootLogger( new BootLogger() {
      @Override
      public void trace( Supplier args ) {
          // ...
      }
      @Override
      public void stdout( String args ) {
          // ...
      }
      @Override
      public void stderr( String args, Throwable thw ) {
          // ...
      }
      @Override
      public void stderr( String args ) {
          // ...
      }
}).autoLoadModules().exec();

Кроме того, мы можем определить информацию о конфигурации журнала в config.yaml файл:

log:
    level: warn
    appenders:
    - type: file
      logFormat: '%c{20}: %m%n'
      file: /path/to/logging/dir/logger.log

8. Тестирование

Для тестирования, Bootique поставляется с бутик-тест модуль. Есть два способа, с помощью которых мы можем проверить Bootique приложение.

Первый подход заключается в “Передний план” подход, который заставляет все тестовые случаи работать на главном тестовом потоке.

Другой – ‘фон’ подход, который делает тестовые случаи работать на изолированном пуле потоков.

Среда «переднего плана» может быть инициализирована с помощью БЗТестФактория :

@Rule
public BQTestFactory bqTestFactory = new BQTestFactory();

“Фоновая” среда может быть инициализирована с помощью БЗДемонТестФактория :

@Rule
public BQDaemonTestFactory bqDaemonTestFactory = new BQDaemonTestFactory();

Как только фабрика по охране окружающей среды будет готова, мы сможем написать простые тестовые случаи для тестирования служб:

@Test
public void givenService_expectBoolen() {
    BQRuntime runtime = bqTestFactory
      .app("--server").autoLoadModules()
      .createRuntime();
    HelloService service = runtime.getInstance( HelloService.class );
 
    assertEquals( true, service.save() );
}

9. Заключение

В этой статье мы показали, как создать приложение с помощью Bootique основные модули. Есть несколько других Bootique модули, доступные как bootique-jooq , бутик-котлин , бутик-работа и так далее. С полным списком доступных модулей можно ознакомиться здесь .

Как всегда, полный исходный код доступен более чем на GitHub.