目的
Libertyで Spring Boot 3 のプログラムをテストします。
Spring Boot 3 プログラムのベースを入手
いつものDockerに用意するのではなく、Spring Boot 3 プログラムのベースを作成するところから説明します。
Spring InitializerでMavenを指定してプロジェクトをダウンロードします。
画像のように指定して GENERATE ボタンを押してダウンロードします。
PackagingはWarにします。
Eclipseにプロジェクトをインポート
ダウンロードした zip を Eclipseにインポートします。
zip は unzip しておきます。インポートするとそこがプロジェクトのディレクトリになるので、それを考慮します。
File > Import で Existing Maven Projects を選択し、
unzipしたディレクトリを選択するとインポートできます。
他に必要な構成 (方法はここでは省略)
- Libertyサーバーの追加とプロジェクトのビルドパスへの追加
注:Libertyは最新を使うようにします。導入済みのものでテストしてたら、最新で修正される関係ないエラーが発生してしまいました。mavenのプラグインからでも起動はできるように構成はできますが、ここでは別の構成としました。
Hello World!!コードを追加してビルド
Eclipseを使ってソースを追加します。
package pdprof.spring;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@RequestMapping(value = "/hello")
@ResponseBody
private String hello() {
return "Hello World!!";
}
}
書き方の詳細は気になったキーワードで検索、ということでここでは省略します。
その後はプロジェクトの右クリックメニューから Run As > Maven install でwarファイルを作成します。
注: war は Mavenプロジェクトのtargetディレクトリに作成されます。
Libertyサーバーの構成と起動
Eclipseで先ほど作成したLibertyサーバーの server.xml に feature を追加します。また、springBootApplicationの location を maven install したときに作成される war ファイルを指定します。
<server description="new server">
<!-- Enable features -->
<featureManager>
<feature>servlet-6.0</feature>
<feature>springboot-3.0</feature>
<feature>localConnector-1.0</feature>
</featureManager>
<!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
<httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>
<!-- Automatically expand WAR files and EAR files -->
<applicationManager autoExpand="true"/>
<springBootApplication location="/home/keniooi/git/spring-boot/workspace/pdprof/target/pdprof-0.0.1-SNAPSHOT.war">
<applicationArgument>--server.servlet.context-path=/spring-boot</applicationArgument>
</springBootApplication>
<!-- Default SSL configuration enables trust for default certificates from the Java runtime -->
<ssl id="defaultSSLConfig" trustDefaultCerts="true"/>
</server>
構成を保管したらサーバーを起動します。
http://localhost:9080/spring-boot/hello にアクセスして動作を確認します。
Gitレポジトリ
ここまではプログラムの作成方法でしたが、Dockerを使った実行環境を構築して、動作を確認します。用意したGitレポジトリをクローンします。
git clone https://github.com/keniooi/spring-boot.git
cd spring-boot/spring-boot-docker/
レポジトリの構成
- workspace - eclipse workspace
- spring-boot-docker - Docker環境構築用ファイル
workspaceのほうはそのまま使用するか、別のworkspaceにインポートするなどして使用します。
Libertyのイメージをビルドして開始
Spring Bootコードとサーバー構成を含むイメージをビルドします。
./setup-docker.sh
./start.sh
コンテナーの動作確認
http://localhost:9080/spring-boot/hello にアクセスして動作を確認します。
トラブルシューティング
毎度のことですが、よくつかう dockerコマンドを書いておきます。この文書でもpodman, dockerとまとまりがないですが、Linux では dockerがpodmanを呼び出すようになっていました。
docker ps # 動作中のContainer確認
docker logs -f spring-boot # ログ確認
docker restart spring-boot # 再起動
docker inspect spring-boot # container 確認
docker exec -it spring-booti bash # Container内状況確認
など試してみましょう。
まとめ
Eclipseを使ってLibertyで動作するSpring BootのHello World!!を作成しました。
Spring BootのアプリケーションをDockerコンテナーで起動して動作をテストしました。