Bootiqueの紹介
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。