English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

spring Boot을 원격 서버의 tomcat에 배포하는 방법

서론

Spring Boot 프로젝트는 일반적으로 내장된 Tomcat이나 Jetty 서버에서 실행되며, War 패키지를 외부 서비스 컨테이너에 배포하는 경우는 드물며, Linux에 배포된 경우도 대부분 Application 클래스를 직접 실행합니다. 그러나 때로는 외부 서버에 배포해야 하는 경우가 있으며, 이는 Spring Boot에게는 조금 번거로울 수 있습니다.

많은 이야기를 하지 않고, 자세한 소개를 함께 보도록 하겠습니다.

환경 선언:

jdk:1.8

서버: 알리云, ubuntu 16.04

springBoot:1.5.9.RELEASE

목적

Spring Boot를 원격 서버의 Tomcat에 패키지할 것입니다。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>waibao</groupId>
 <artifactId>project</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>war</packaging>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-스타터-parent</artifactId>
  <version>1.5.9.RELEASE</version>
 </parent>
 <properties>
  <java.version>1.8</java.version>
 </properties>
 <dependencies>
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-스타터-web</artifactId>
  </dependency>  
  <!-- 移除tomcat的支持,改成编译时支持 -->
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-스타터-tomcat</artifactId>
   <scope>provided</scope>
  </dependency>
  <dependency>   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis<-spring-boot-starter</artifactId>
   <version>1.3.1</version>
  </dependency>
  <!--非严格模式 -->
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-스타터-thymeleaf</artifactId>
  </dependency>
  <!-- 配置thymeleaf的非严格模式,需要该依赖-->
  <dependency>   <groupId>net.sourceforge.nekohtml</groupId>
   <artifactId>nekohtml</artifactId>
   <version>1.9.22</version>
  </dependency>
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-스타터-jdbc</artifactId>
  </dependency>
  <dependency>   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis<-spring-boot-starter</artifactId>
   <version>1.3.1</version>
  </dependency>
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-스타터-test</artifactId>
   <scope>test</scope>
  </dependency>
  <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql<-connector-java</artifactId>
   <version>6.0.6</version>
  </dependency>
  <!-- 阿里连接池-->
  <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.1.5</version>
  </dependency>
  <!-- fastJson -->
  <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.40</version>
  </dependency>
  <!-- 热部署-->
  <dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
   <version>1.5.9.RELEASE</version>
   <optional>true</optional>
   <scope>true</scope>
  </dependency>
 </dependencies>
 <build>
  <finalName>/testweb</finalName>
  <plugins>
   <plugin>    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
     <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>

注意

1、maven 插件不能使用springBoot自带的插件。我使用这个插件报以下错误

Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar (default-jar) on project project: Execution default-jar of goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar failed: An API incompatibility was encountered while executing org.apache.maven.plugins:maven-jar-plugin:2.6:jar: java.lang.ExceptionInInitializerError: null

maven 플러그인을 수정해야 합니다

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.4</version>
  <configuration>
   <failOnMissingWebXml>false</failOnMissingWebXml>
  </configuration>
</plugin>

주의해야 할 것은, web.xml이 없기 때문에 추가로

<configuration>  <failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>

2、

<build>
 <finalName>xxx</finalName>
</build>

finalName은 application.yml의 context와 일치해야 합니다-경로가 일치해야 합니다.

3tomcat의 의존성을 컴파일 시간에 맞게 변경해야 합니다

<dependency>   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-스타터-tomcat</artifactId>
   <scope>provided</scope>
  </dependency>

4SpringBoot 엔트리 클래스, SpringBootServletInitializer를 상속하고 오버라이드

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

MainApplication.class는 SpringBoot의 엔트리 클래스입니다.

打包

프로젝트의 루트 디렉토리로 이동하세요. IDEA를 사용하는 경우 여기서 입력하세요:

mvn clean package -DskipTests

打包가 끝나면 프로젝트의 target 폴더에 해당하는 .war 파일이 생성됩니다

업로드

War 파일을 Tomcat의 webapps 밑에 떨어뜨려면 됩니다.

아직 해결하지 않은 문제:

원래는 직접 Jar 패키지로 만들려 했습니다. 그런데 마aven 플러그인 부분에서 오류가 계속 발생하여 War 패키지로 만들고 Tomcat에 업로드했습니다.

이 문제를 해결한 사람이 있다면 알려주세요.

이 문서에서는 이것이 버그라고 말하고 있습니다...

https://issues.apache.org/지라/브라우즈/MSITE-724

업데이트。。。。

문제가 해결되었습니다. springBoot을 바로 Jar로 패키징하고 실행할 수 있습니다

원인:

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

springBoot이 제공하는 공식 예제에서 사용하는 이 플러그인을 다운로드합니다

Maven은 자동으로 2.4 버전 및 2.6버전의 maven-jar-plugin에 의존합니다

Maven은 기본적으로 2.6버전이 문제였습니다. 일단 프로젝트가 maven 오류를 보고했습니다-jar-plugin 2.6jar 불일치. 오류를 찾을 수 없었습니다

그것은 다음과 같습니다 2.6버전 불일치. 손으로 수정하면 됩니다 2.4버전을 확인하십시오. 다음과 같이 보여집니다:

<plugins>
   <plugin>    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
   <plugin>    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
   </plugin>
</plugins>

결론

이 글의 모든 내용이 끝납니다. 이 글의 내용이 여러분의 학습이나 업무에 도움이 되길 바랍니다. 의문이 있으시면 댓글을 남겨 주시기 바랍니다. 감사합니다. 노래 교본에 대한 지원에 감사합니다.

고지사항: 본 내용은 인터넷에서 가져온 것으로, 저작권자는 모두에게 있습니다. 인터넷 사용자가 자발적으로 기여하고 업로드한 내용으로, 웹사이트는 소유권을 가지지 않으며, 인공 편집 처리되지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 침해가 의심되는 내용을 발견하시면, 이메일을 보내 주시기 바랍니다: notice#oldtoolbag.com에 대한 신고를 보내시면, 이메일 주소에서 '#'을 '@'으로 변경하십시오. 관련 증거를 제공하시면, 해당 내용이 저작권 침해로 확인되면 즉시 해당 내용을 삭제하겠습니다.

추천 항목