1概要



Bootique


は、次世代のスケーラブルなマイクロサービスを構築することを目的とした、非常に軽量のオープンソース

コンテナレス

JVMフレームワークです。組み込みJettyサーバー上に構築されており、


jax-rs


を使用して

REST

ハンドラーを完全にサポートしています。

この記事では、

Bootique

を使って簡単なWebアプリケーションを作成する方法を説明します。


2 Mavenの依存関係


pom.xmlに次の依存関係を追加して

Bootique__を使い始めましょう。

<dependency>
    <groupId>io.bootique.jersey</groupId>
    <artifactId>bootique-jersey</artifactId>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>io.bootique</groupId>
    <artifactId>bootique-test</artifactId>
    <scope>test</scope>
</dependency>

ただし、

Bootique

では、いくつかの

BOM(“部品表”)

インポートを宣言する必要もあります。そのため、次の

<dependencyManagement>

セクションを__pom.xmlに追加する必要があります。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.bootique.bom</groupId>
            <artifactId>bootique-bom</artifactId>
            <version>0.23</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>


Bootique

の最新版はhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22io.bootique%22[Central Maven Repository]にあります。

実行可能なjarを構築するために、

Bootique

はhttps://maven.apache.org/plugins/maven-shade-plugin/[maven-shade-plugin]に依存しています。

そのため、以下の設定も追加する必要があります。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
        </plugin>
    </plugins>
</build>


3アプリケーションを起動する


Bootique

アプリケーションを起動する最も簡単な方法は、


Bootique


‘s

exec(を呼び出すことです。メインメソッドから)

method:

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または

server

引数のいずれかを渡す必要があり、サーバは

defaultポート8080__で起動して実行されます。


4モジュール


Bootique

アプリケーションは“モジュール”の集合で作られています。

Bootique

s用語で​​は、「モジュールはコードを含むJavaライブラリです」。これはすべてのサービスをモジュールとして扱うことを意味します。依存性注入には、


Google Guice


を使用します。

それがどのように機能するかを見るために、1つのインターフェースを作成しましょう:

public interface HelloService {
    boolean save();
}

それでは、実装を作成する必要があります。

public class HelloServiceImpl implements HelloService {

    @Override
    public boolean save() {
        return true;
    }
}

モジュールをロードする方法は2つあります。最初のものは

Guice




Module


インターフェースを使うことです。もう1つは

Bootique

のhttps://github.com/bootique/bootique/blob/master/bootique/src/main/java/io/bootique/BQModuleProvider.java[

BQModuleProvider

](

auto-loading

としても知られる)を使用することです。 。


4.1. Guiceモジュール

ここでは、

Guice

´s


モジュール


インターフェースを使用してインスタンスをバインドできます。

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.

BQModuleProvider

(自動ロード)

**

ここで、私たちがする必要があるのは

BQModuleProvider

で以前に作成されたモジュール – バインダーを定義することです:

public class ModuleProvider implements BQModuleProvider {

    @Override
    public Module module() {
        return new ModuleBinder();
    }
}

この手法の利点は、モジュール情報を

Bootique

インスタンスにマッピングする必要がないことです。


/resources/META-INF/services/io.bootique.BQModuleProvider

にファイルを作成し、パッケージ名を含む

ModuleProvider

のフルネームを書くだけで、あとは

Bootique

が行います。

com.baeldung.bootique.module.ModuleProvider

これで、


@Inject


注釈を使用して、ランタイム

@Inject
HelloService helloService;

ここで注意すべき重要な点は、

Bootique

独自のDIメカニズムを使用しているので、

Guice

https://google.github.io/guice/api-docs/latest/javadoc/indexを使用する必要がないことです。

html?com/google/inject/ImplementedBy.html[@ ImplementedBy]

サービスインスタンスをバインドするためのアノテーション。

** 5 RESTエンドポイント

**

JAX-RS APIを使用してRESTエンドポイントを作成するのは簡単です。

@Path("/")
public class IndexController {

    @GET
    public String index() {
        return "Hello, baeldung!";
    }

    @POST
    public String save() {
        return "Data Saved!";
    }
}

エンドポイントを

Bootique

自身の

Jersey

インスタンスにマッピングするには、https://github.com/bootique/bootique-jersey/blob/master/bootique-jersey/src/main/java/io/bootique/を定義する必要があります。ジャージ/JerseyModule.java[

JerseyModule

]:

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


6. 構成

YAMLベースのプロパティファイルで作り付けのまたはカスタムの設定情報を提供することができます。

たとえば、カスタムポートでアプリケーションを起動してデフォルトのURIコンテキスト「hello」を追加する場合は、次のYAML設定を使用できます。

jetty:
    context:/hello
    connector:
        port: 10001

それでは、アプリケーションを起動しながら、configパラメータでこのファイルの場所を指定する必要があります。

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


7. ロギング

すぐに使える

Bootique

には、http://bootique.io/docs/0/bootique-logback-docs/[

bootique-logback

]モジュールが付属しています。このモジュールを使用するには、

pom.xml

に次の依存関係を追加する必要があります。

<dependency>
    <groupId>io.bootique.logback</groupId>
    <artifactId>bootique-logback</artifactId>
</dependency>

このモジュールには


BootLogger


インターフェースが付属しており、カスタムを実装するためにオーバーライドできます。ロギング

Bootique.app(args)
  .module(module)
  .module(ModuleBinder.class)
    .bootLogger( new BootLogger() {
      @Override
      public void trace( Supplier<String> 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

にはhttps://github.com/bootique/bootique/tree/master/bootique-test[

bootique-test

]モジュールが付属しています。

Bootique

アプリケーションをテストする方法は2つあります。

最初のアプローチは、すべてのテストケースをメインのテストスレッド上で実行させる「フォアグラウンド」アプローチです。

もう1つは、テストケースを独立したスレッドプールで実行する「バックグラウンド」アプローチです。

「フォアグラウンド」環境はhttps://github.com/bootique/bootique/blob/master/bootique-test/src/main/java/io/bootique/test/junit/BQTestFactory.java[

BQTestFactory

]を使用して初期化できます。

@Rule
public BQTestFactory bqTestFactory = new BQTestFactory();

「背景」環境はhttps://github.com/bootique/bootique/blob/master/bootique-test/src/main/java/io/bootique/test/junit/BQDaemonTestFactory.java[

BQDaemonTestFactory

]を使用して初期化できます。

@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-jooq


、https://github.com/bootique/bootique-kotlin[

bootique-kotlin

]、https:/のような他にもいくつかの

Bootique

モジュールがあります。/github.com/bootique/bootique-job[

bootique-job

]など利用可能なモジュールの全リストはhttps://github.com/bootique[here]にあります。

いつものように、完全なソースコードが利用可能です

over on
GitHub。