2017-12-07 1 views
4

Tomcat Server에 배포하려고하는 SpringBoot 응용 프로그램이 있습니다. 나는 다음과 같은 추가 한 build.gradle에서SpringBoot 응용 프로그램 Tomcat 배포

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

: 정리 빌드를 수행 한 후

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

내가 전쟁에 파일을 복사 한 다음 온라인 참고 문헌에 따르면, 나는 Application 클래스에서 일부 코드를 추가 한 Tomcat의 webapps 폴더로 이동하십시오. 그러나 배치는 두 번 발생하며 컨텍스트가 이미 존재하므로 예외로 종료됩니다. 내가 뭘 놓치고 있니?

도움을 주신 데 대해 감사드립니다.

+0

스프링 부트를 사용하는 경우 여기에 포함 된 톰캣 서버. 그냥'war'을'jar' ('pom.xml'에서' jar'을 찾으십시오)에 패키징하고'java -jar ABC.jar' 명령을 사용하여 jar를 실행하십시오. –

+0

tomcat에 배포하고 싶습니다. – kavita

+0

그러면 왜 'spring-boot'를 사용하고 있습니까? 웹 프로젝트를 만들고, 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); 
    } 
} 

이 같은 톰캣 더 이상의 전쟁 파일을 배포 가정, 개별 로깅 및 외부 "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에서 전문가가 아니에요하지만 의존성 잘 보인다.

희망이 있습니다.

관련 문제