2017-12-07 21 views
4

Tomcat Serverに配備しようとしているSpringBootアプリケーションがあります。次のようにオンラインリファレンスによると、私はApplicationクラスにいくつかのコードを追加しました:SpringBootアプリケーションTomcat配備

public class SkyVetApplication extends SpringBootServletInitializer{ 
... 
    @Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(SkyVetApplication.class); 
} 
... 
} 

build.gradleでは、私は次のよう追加しました:

compile group: 'org.springframework.boot', name: 'spring-boot-starter-web' 
**providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'** 

を私は戦争のファイルをコピーしたクリーンビルドを行った後Tomcatのwebappsフォルダに移動します。しかし、展開は2回起こり、コンテキストが既に存在するため例外が終了します。私は何が欠けていますか?

助けを非常に感謝します。

+0

春のブートを使用している場合は、埋め込みのTomcatサーバーを使用します。単に 'war'を' jar'( 'pom.xml'の' jar ')にパッケージし、' java -jar ABC.jar'コマンドを使ってjarを実行してください。 –

+0

私はtomcatにデプロイしたい – kavita

+0

なぜ 'spring-boot'を使用しているのですか? Webプロジェクトを作成し、warファイルを作成して展開するだけです。 –

答えて

0

メインメソッドを追加する必要があります。

は、これらの例をご覧ください:https://github.com/Pytry/bootiful-war-deployment

をここで(それはロンボク島の注釈プロセッサを使用しています)「こんにちは」モジュールからの例です。

package com.example.bootifulwar; 

import lombok.extern.slf4j.Slf4j; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.web.support.SpringBootServletInitializer; 
import org.springframework.scheduling.annotation.EnableScheduling; 
import org.springframework.scheduling.annotation.Scheduled; 

@SpringBootApplication 
@EnableScheduling 
@Slf4j 
public class HelloServletInitializer extends SpringBootServletInitializer{ 

    @Value("${messageForUser}") 
    private String message; 

    @Value("${whatDoesTheFoxSay:'No body knows.'}") 
    private String whatDoesTheFoxSay; 

    public static void main(String[] args){ 

     SpringApplication.run(HelloServletInitializer.class, args); 
    } 

    @Scheduled(fixedRate = 2000) 
    public void sayHelloTo(){ 

     log.info("Hello! " + message); 
    } 

    @Override 
    public SpringApplicationBuilder configure(SpringApplicationBuilder application){ 

     log.info(
      "\n*********************\n" + 
       "What does the fox say?\n" + 
       whatDoesTheFoxSay + 
       "\n*********************\n"); 
     return application.sources(HelloServletInitializer.class); 
    } 
} 

はあなたが同じTomcatに複数のwarファイルを配備すると仮定すると、個別のロギングおよび外部の「application.properties」を利用するには、各アプリケーションのコンテキスト・パス用のカスタムのcontext.xmlを配置する必要があります"conf/Catalina/localhost"の内部にあります。

例:

<?xml version='1.0' encoding='utf-8'?> 
<Context docBase="hello.war" path="hello"> 
    <Resources className="org.apache.catalina.webresources.StandardRoot"> 
    <PreResources base="hello\\config" 
        className="org.apache.catalina.webresources.DirResourceSet" 
        internalPath="/" 
        webAppMount="/WEB-INF/classes"/> 
    </Resources> 
</Context> 

私はgradlemの専門家ではないが、あなたの依存関係は、罰金に見えます。

希望に役立ちます。

関連する問題