kagamihogeの日記

kagamihogeの日記です。

Spring Bootをeclipseのdynamic web projectとして実行する

spirng-bootには組み込みコンテナがあるので、開発時にアプリケーションサーバ上で動かしたいケースはアンマリ無いが、一応メモ。といっても、jarからwarに変更する際の手順をやればよいだけ。参照:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file

まず、プロジェクト右クリック -> config -> Converted to faceted formでDynamic Web Moduleにチェックを入れて、プロジェクトをdynamic web project扱いにする。

従来のspring-mvcとかではWebApplicationInitializerのサブクラスを自前で作ったりしていたが、それのspring-boot版のSpringBootServletInitializerを継承したクラスを作る。リファレンスのサンプルではspring-bootのmain置いてるクラスに継承させているが、役割的に同じだからなのだろう。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

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

    }

}

pom.xmlのpackagingをjarからwarに修正する。

 <packaging>war</packaging>

このまま起動すると、tomcatの組み込みコンテナが邪魔してAPサーバが起動しない。ので、その依存性をprovidedにする。

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

これで起動する。動作確認はwildfly 10で行った。