4
2

More than 3 years have passed since last update.

SpringBootによるWEBアプリをWARにしてTomcatサーバーにデプロイ

Last updated at Posted at 2020-09-08

前提

  • AmazonLinux2(EC2)
  • JDK1.8.0
  • MySQL 8.0
  • 構成管理はGradle 6.0
  • こちらでEC2、RDSによるアプリケーションサーバー環境を構築済み。なお、当初EC2インスタンスをmicroにしていたが、メモリ不足でビルドが失敗したのでmediumにした。
  • こちらでTomcatとJDKをインストール済み。今回はApacheは使わずとりあえずTomcatのみで動かす。
  • プロジェクトはGitHubからcloneする。

Springを実行するクラスにwarデプロイ用記述を追加

  • プロジェクトを作成したとき、自動でSpringを実行するクラスが作成されていると思う(@SpringBootApplicationアノテーションがついているクラス)。
  • ここにwarとしてデプロイ可能にするための記述をする。Spring公式を参照した。
@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

}

Gradleの設定とビルド

Gradleの設定

  • war作成用の設定をする。archiveFileNameはwarの名前となる。archiveNameにしていたら、非推奨とのメッセージが出た。Gradle7.0からはこれだと動かなくなるそう。
  • SpringBoot組み込みTomcatが、EC2上のものと競合しないよう設定
  • ほかに、自分の場合はSeleniedによる画面テストコードもプロジェクトに含めていたので、これを除外する設定をtest内に記述した。
plugins {
    id 'org.springframework.boot' version '2.2.4.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    id 'war'
}

// ~省略~

war {
    enabled = true
    archiveFileName = 'sample.war'
}

dependencies {
    // ~省略~
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}

test {
    // ~省略~
    exclude 'com/example/demo/ViewTest.class'
}

EC2上でビルド

  • ホームディレクトリにWEBアプリのプロジェクトをgit cloneしておく。
  • プロジェクト内のapplication.propertiesにRDSの設定を反映させておく。
プロジェクトのapplication.propertiesがあるディレクリにて
$ sudo vim application.properties
application.properties
spring.datasource.url=jdbc:mysql://RDSのエンドポイント:3306/データベース名?serverTimezone=JST
spring.datasource.username=******
spring.datasource.password=***********
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.open-in-view=true
#~省略~
  • gradlew buildコマンド実行。buildが成功すると、project名/build/libs内にsample.warが生成される。
  • まだ分かっていないところがあるが、project名-0.0.1-SNAPSHOT.warというwarも生成されていた(sample.warと中身は同じ?)。
プロジェクトのディレクトリにて
$ ./gradlew build

生成されたwarをTomcatへ配備

  • tomcat/webapps配下へsample.warをコピーする。※自分の場合は/opt/tomcat-9/webappsに配備。
$ cp sample.war /opt/tomcat-9/webapps/
  • Tomcat再起動
$ sudo systemctl restart tomcat

↓のようにアクセスするとアプリが動く。
http://EC2のエンドポイント:8080/sample/作成アプリに応じたリクエスト先

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2