[Spring Boot]組込みじゃないTomcatでSpring BootのWebAppを起動
◆概要
STSで作成された、「Hello World!」と表示する
「Springスターター・プロジェクト(Spring Initializer)」を
STS上で作成した,組み込みではないTomcatで起動すること
◆本記事のゴール
STS上で作成した,組み込みではないTomcatで起動しています。
そのサーバーに「Springスターター・プロジェクト(Spring Initializer)」が追加されている。
ブラウザ上で「Hello World!」と表示される
◆前提条件
STSで、「Springスターター・プロジェクト(Spring Initializer)」を作成し、
組み込みのTomcatで起動。「Hello World!」が表示される状態。
そこまでの方法は、
下記の記事を参考にして下さい。
下記、記事の所要時間は、
STS4がインストールされていれば、15分程度が目安。
[Spring]SpringBootで簡単なWebApp作成「Hello World!」
◆実行環境
・MacOS(BigSur ver 11.4)
・STS4(Spring Tool Suit4)
・Java(ver 11)
・Tomcat(ver 8.5.78)⇨本記事内でインストール方法紹介
◆手順
①SpringBootServletInitializerのサブクラスを作成する
まず、作成したプロジェクトの、
プロジェクトエクスプローラーを確認すると、
下記のように、表示されていました。
つまり、「web.xmlファイルが存在しない」ことから、
このままでは、正常に起動できません。
そこで、Servlet起動時の設定情報を付与する必要があります。
ただ、「web.xmlファイル」を作成するわけではありません。
「SpringBootServletInitializerのサブクラス」を作成します。
「SpringBootServletInitializerのサブクラス」については、
下記の資料からある程度は、理解できそうです。
SpringBootServletInitializer (Spring Boot 2.7.0 API)
こちらの説明によると、
「An opinionated WebApplicationInitializer to run a SpringApplication from a traditional WAR deployment. Binds Servlet, Filter and ServletContextInitializer beans from the application context to the server.」
つまり、作成されるwarファイルを従来のコンテナに配置できるように
バインドしてくれるクラスのようです。
そこで、前回の記事では特に触れることがなかった、
「DemoApplication.java」に変更を加えます。
まず、src/main/java/com/example/demoの中にある、DemoApplication.javaを開きます。
「SpringBootServletInitializer」と「SpringApplicationBuilder」
に関するframeworkをimportします。
次に、Demo1Applicationのクラスを書き換えます。
「SpringBootServletInitializer」を継承します。
そして、configureメソッドをオーバライドしましょう。
ソースコードは、
下記です。
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Demo1Application {
public static void main(String[] args) {
SpringApplication.run(Demo1Application.class, args);
}
}
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.boot.builder.SpringApplicationBuilder;
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoApplication.class);
}
}
②Tomcatのサーバーを作成、プロジェクトを追加する
・サーバーの作成
[Spring]SpringMVCで簡単なWebApp作成「Hello World!」
「手順:①サーバーの構築(Tomcat)
・Tomcatをダウンロード
・STS4のサーバーの設定
・サーバーの作成」
を参考にしてください。
・「プロジェクト・ファセット」の設定変更
プロジェクトを右クリックして、
プロパティを開きます。そして、「プロジェクト・ファセット」を開きます。
「ファセットフォームへ変換...」を押します。
すると、
下記のように表示が変わるので、
「Java」と「動的Webモジュール」にチェックを入れ、
バージョンを合わせます。
この設定ができたら、適応を押して閉じます。
・サーバーにプロジェクトの追加
サーバーを右クリックして、
「プロジェクトの追加と除去」を押します。
springBootのプロジェクト(今回はdemo)を選択して、
追加します。追加したら、完了を押して閉じます。
※この時、
プロジェクト・ファセット」の設定で、
「動的Webモジュール」にチェックを入れていない場合、
プロジェクトが表示されません。
サーバーの起動、ブラウザでアクセス
・デプロイメント・アセンブリーでのMavenの依存解決設定
Warningで、以下のようなメッセージが表示されるのですが、
このままでは、サーバーの起動しても恐らく下記のエラーがでて、失敗します。
org.apache.catalina.core.StandardContext listenerStart
重大: 前のエラーのためにアプリケーションリスナのインストールをスキップします
ですので、
デプロイメント・アセンブリーでのMavenの依存解決を設定することで、
Warnigを解消します。
プロジェクトを右クリックし、設定画面を開きます。
「デプロイメント・アセンブリー」を開きます。
追加ボタンを押します。
「Java ビルドパス エントリー」を選択し、次へ進み、
「Mavaenの依存関係」を選択しましょう。
すると、
「デプロイメント・アセンブリー」に、「Mavaenの依存関係」が追加されます。
これで、
Warningが解消されれます。
※STS4の場合、
「Eclipse Enterprise Java and Web Developer Tools」(WDT)というプラグインを入れていないと、「デプロイメント・アセンブリー」で追加ボタンを押しても、
「Java ビルドパス エントリー」が表示されません。
なので、WDTを入れてください。
WDTの入れ方がわからない場合は、下記記事の
[Spring]SpringMVCで簡単なWebApp作成「Hello World!」
「手順:⓪STS4の設定:アプリケーション開発のため
・WTPプラグインのインストール」
を参考にしてください。
・サーバーの起動
それでは、サーバーを起動させましょう。
埋め込みじゃないTomcatから起動しても、
コンソールには、Springと表示されるようですね。
・ブラウザからアクセス
それでは、仕上げです。
にブラウザからアクセスしましょう。
さて、
上記のように表示されたでしょうか。
これで、
STS上から埋め込みではないTomcatで起動できました。
発展すると、STS上ではない完全に外部のTomcatから起動するということもやれます。
そうすれば、作成したWebAppを外部に公開することもできますね。
以上です。
ありがとうございました。
それでは!
Discussion