web-dev-qa-db-ja.com

TomcatサーバーにスプリングブートWebアプリケーションをデプロイする方法

スプリングブートWebアプリケーションを作成しましたが、TomcatにスプリングブートWebアプリケーションWARファイルをデプロイできず、Javaアプリケーションとして実行できます。 TomcatでスプリングブートアプリケーションをWebサービスとして実行する方法。私は次のコードを使用しています。 Tomcat plzで実行できる場合は、web.xmlを使用せずにweb.xmlを使用して注釈を使用してください。

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

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

}

休憩コントローラーの次のコード

@RestController
public class HelloWorld{

   @RequestMapping(value = "/hello", method = RequestMethod.GET)
   public ResponseEntity<String> get() {
       return new ResponseEntity<String>("Hello World", HttpStatus.OK);
   }
}

私が使用しているPom.xmlに従って

<groupId>org.springframework</groupId>
<artifactId>web-service</artifactId>
<version>0.1.0</version>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.0.RELEASE</version>
</parent>

<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>
        </dependency>

        <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
    </dependency>
        <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
    </dependency>

</dependencies>

<properties>
    <Java.version>1.6</Java.version>
</properties>


<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<repositories>
    <repository>
        <id>spring-releases</id>
        <url>https://repo.spring.io/libs-release</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>spring-releases</id>
        <url>https://repo.spring.io/libs-release</url>
    </pluginRepository>
</pluginRepositories>
<packaging>war</packaging>
25
satish

Spring Bootアプリをwarファイルとして展開する方法に関する2つの優れたドキュメントを次に示します。

この春のブートに従うことができます howto-traditional-deployment documentation-

このドキュメントによる手順-

  1. SpringBootServletInitializerを拡張するには、アプリケーションのメインクラスを更新します。

  2. 次のステップでは、ビルド構成を更新して、プロジェクトがjarファイルではなくwarファイルを生成するようにします。 <packaging>war</packaging>

  3. 埋め込みサーブレットコンテナの依存関係を提供されているものとしてマークします。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-Tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    

そしてもう一つの方法-

これを参照してください spring io documentation これは、アプリケーションサーバーにスプリングブートアプリを展開する方法の概要を示しています。

手順-

  1. jarパッケージをwarに変更します。

  2. spring-boot-maven-pluginpom.xmlプラグインの宣言をコメントアウトします

  3. SpringBootServletInitializerを拡張してconfigureメソッドをオーバーライドすることにより、アプリケーションにWebエントリポイントを追加します

  4. spring-boot-starter-Tomcat dependencyを削除し、spring-boot-starter-web依存関係を変更します

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-Tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

pom.xmlで、spring-beansおよびspring-webmvc依存関係を削除します。 spring-boot-starter-web依存関係には、これらの依存関係が含まれます。

32
Omkar

Springブートは、Tomcatサーバーをサポートするservlet 3.xwithout web.xml)で従来のwarファイルとしてアプリケーションをデプロイするオプションを提供します。これについては spring boot documentation を参照してください。ここで必要なことを簡単に説明します。

ステップ1:パッケージをwarに変更するためにpom.xmlを変更します:(すでに行ったこと)

<packaging>war</packaging>

ステップ2:依存関係を変更します

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-Tomcat</artifactId>
   </dependency>

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-Tomcat</artifactId>
      <scope>provided</scope>
</dependency>

ステップpom.xmlタグの下の<build>で、war名を追加する(バージョン名にwar名を追加する必要がない場合)。

<build>
    <finalName>web-service</finalName>
.....

ステップ4:mavenビルドを実行してwarを作成します:clean installステップ5:生成されたwarファイルweb-service.warをTomcatにデプロイし、ブラウザーでURLを要求しますhttp://<Tomcat ip>:<Tomcat port>/web-service/hello

Hello Worldを取得する必要があります。

注:また、@ ALi Dehghaniが言ったように、冗長な依存関係を削除することもできます。

12
Tom Sebastian

spring-boot-starter-Tomcat依存関係を次のようにprovidedとしてマークします。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-Tomcat</artifactId>
            <scope>provided</scope>
</dependency>

注1:pom.xmlから冗長な依存関係を削除します:

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
</dependency>
<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
</dependency>

それらはspring bootスターターパッケージの一部です

注2: jarをwarにしない

4
Ali Dehghani

私はこの問題に直面しました。上記の多くは良いアドバイスです。私の問題は、最初にPivotal TCサーバーに展開することでした。

  1. POMのパッケージをWARにします。

    <packaging>war</packaging>
    
  2. Pomに依存関係を追加します

    <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>
    
  3. Main()を保持するためにApplicationクラスを使用しました。 MainにはEntityManagerなどを挿入できるように構成コードがありました。このEntityManagerは、永続情報のためにApplicationContextおよびpersistence.xmlファイルからの情報を使用しました。 SpringBootでは正常に動作しましたが、Tomcatでは正常に動作しませんでした。実際、TomcatではMain()は呼び出されません。 ApplicationクラスはSpringBootServletInitializerを拡張します。

  4. 次のメソッドがApplicationクラスに追加されます。

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        Application obj = new Application();
        @SuppressWarnings("resource")
        ConfigurableApplicationContext applicationContext = 
             new ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");
         applicationContext.registerShutdownHook();
         applicationContext.getBeanFactory().autowireBeanProperties(
             obj, AutowireCapableBeanFactory.AUTOWIRE_NO, false);
        return application.sources(Application.class);
    }
    

最後の行のみが必要です-他のコードは以前にmain()に保持され、EntityManagerのインジェクションを取得するためにここに移動されました。

  1. 必要な注釈は次のとおりです。

    @EnableAutoConfiguration
    @ComponentScan
    //@SpringBootApplication will consist of both of these and @Configuration
    
  2. 一部のURLでは、ルートコンテキストの変更が必要になる場合があります

    <artifactId>contextname</artifactId>.
    

役立つことを願っています

0
Ged

スプリングブートjarをスプリングブートwarに変換するプロセスは、次のドキュメントに記載されています。 http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins- maven-packaging 要するに、スタータークラスを例のように設定し、.pomファイルでパッケージをjarからwarに切り替えます。さらに、spring-boot-starter-Tomcat依存関係を提供に設定する必要があります。繰り返しになりますが、プロセスは上記のリンクの完全な形式で文書化されています。このテーマの詳細については、 https://spring.io/guides/gs/convert-jar-to-で入手できるspring ioガイド「Spring Boot JARアプリケーションをWARに変換する」を参照してください。 war / さらなる支援が必要な場合は、お知らせください。お手伝いさせていただきます。

0
Wheelchair Geek