1. Обзор
Bootique является очень легким открытым исходным кодом контейнер-менее Структура СПМ направлена на создание масштабируемых микроуровн нового поколения. Он построен поверх встроенного сервера Jetty и полностью поддерживает REST обработчики с джакс-rs .
В этой статье мы покажем, как создать простое веб-приложение с помощью Bootique .
2. Мейвен зависимостей
Давайте начнем использовать Bootique добавив следующую зависимость в пом.xml:
io.bootique.jersey bootique-jersey compile io.bootique bootique-test test
Тем не менее, Bootique также требует объявления нескольких BOM (“Билль материала”) Импорт. Вот почему после
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( Supplierargs ) { // ... } @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.