はじめに
Java8, SpringBootで作ったアプリをGoogle App EngineのJava8フレキシブル環境にデプロイしていたのですが、デプロイ先の環境をスタンダード環境に変更する必要がありました。これの手順についてメモします。
環境
以下アプリケーションの環境です。
- 言語 : Java8
- FW : SpringBoot
- ビルドツール : Maven3.5.4
なお、SpringBootアプリケーションはこちら(https://start.spring.io/)で作った雛形をベースにしています。Packagingはjarを選択しました。
手順
流れは以下の通りです。
- GAE用の設定ファイル修正
- pom.xml修正
- クラス修正
1. GAE用の設定ファイル修正
GAE用の設定ファイルをフレキシブル環境用のproject_root/src/main/appengine/app.yamlを削除し、Java8スタンダード環境用にproject_root/src/main/webapp/WEB-INF/appengine-web.xmlを作成し必要事項(参考)を記述します。
2. pom.xml修正
雛形生成の際にビルド後の生成物としてjar形式を選択していたので、pom.xmlの<project>タグ内に<packaging>war</packaging>と記述しwar形式を指定します。(デフォルトでは<packaging>タグはありませんが、指定しないとjar形式になるようです)
3. クラス修正
SpringBootでは、パッケージングをjarからwarに変更する際にクラスの修正も必要になります。以下のようにアプリケーション起動処理が書かれているクラスを修正します。
- SpringBootServletInitializerを継承するよう修正
- configureメソッドをオーバーライドするよう追記
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DemoApplication.class);
}
}
以上の記述をしないと404エラーが発生します。
1~3のステップを踏んだ後に、mvn clean installしてmvn package appengine:deployでデプロイ成功するはずです。