【GCP】GAE Java8フレキシブル環境からスタンダード環境に変更する

はじめに

Java8, SpringBootで作ったアプリをGoogle App EngineのJava8フレキシブル環境にデプロイしていたのですが、デプロイ先の環境をスタンダード環境に変更する必要がありました。これの手順についてメモします。

環境

以下アプリケーションの環境です。

  • 言語 : Java8
  • FW : SpringBoot
  • ビルドツール : Maven3.5.4

なお、SpringBootアプリケーションはこちら(https://start.spring.io/)で作った雛形をベースにしています。Packagingはjarを選択しました。

手順

流れは以下の通りです。

  1. GAE用の設定ファイル修正
  2. pom.xml修正
  3. クラス修正

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でデプロイ成功するはずです。