Spring Boot 的Maven多模塊開發web項目使用外部容器進行部署


Spring Boot中自帶有Tomcat容器,因此Spring Boot項目只需要運行main函數,就可以運行,但是以往的web項目,我們習慣於使用自己安裝的Tomcat運行或者使用Tomcat、Jetty插件來運行項目,方便簡單,同時部署也是簡單,只需要把生成的war包放在Tomcat的webapps下面,然后重啟Tomcat,就可以訪問項目了。那么Spring Boot想通過上面的方式部署和訪問,應該如何操作呢?

其實主要的思路就是把Spring Boot自帶的Tomcat屏蔽掉,然后引入新的Tomcat,這樣就可以了,也就達到了使用Spring Boot輕松開發web項目,簡單部署了。

 本文的項目是基於Maven的多模塊開發的,因此需要有一點這個基礎,如果還不太了解看一下這篇博客http://www.cnblogs.com/advancing/category/1123469.html

 具體的使用外部容器部署的實現方式如下:

1.在父級中設置以下配置

<!-- 這里指定打包的時候不再需要tomcat相關的包 更改打war包加入的配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

父級pom中添加Tomcat、Jetty插件,子模塊中才會繼承,之后再根據子模塊的特性去重新修改插件參數,如端口、編碼....

<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!--如果在這設置屬性(port、path),模塊的path就不起作用了-->
<configuration>
<uriEncoding>UTF-8</uriEncoding>
<!--<port>9080</port>-->
<!--<path>/</path>-->
</configuration>
</plugin>

<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty-version}</version>
<configuration>
<jvmArgs>-Dfile.encoding=UTF-8</jvmArgs>
</configuration>
</plugin>

<!--surefire-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>

2.在子模塊中新建一個和Spring Boot含有main方法的類同級的一個修改啟動類的方法

/**
* 修改啟動類,繼承 SpringBootServletInitializer 並重寫 configure 方法
* Created by kk on 2017/11/21.
*/
public class SpringBootStartApplication extends SpringBootServletInitializer {

@Override
public SpringApplicationBuilder configure(SpringApplicationBuilder builder){
return builder.sources(含有Main方法的類名.class);
}

}

 3.子模塊pom中添加打包所依賴的插件,以及Tomcat、Jetty插件。

<plugins>
<!--spring-boot為了保護application.yml和application.properties,修改了默認的占位符${...}為@...@-->
<!--為了spring boot的yml和properties文件能夠使用maven變量替換,使用${}占位符-->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>utf-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--指定該Main Class為全局的唯一入口-->
<mainClass>cn.XX.wechat.authorization.XXWechatAuthorizationCloudApplication</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<!--可以把依賴的包都打包到生成的Jar包中-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

<!-- 這個配置是打包war包需要的 maven打包的時候告訴maven不需要web.xml,否剛會報找不到web.xml錯誤 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<!--<version>2.4</version>-->
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- Tomcat啟動 直接訪問http://localhost:8080/ -->
<!--<url>http://localhost:8080/</url>-->
<!--<server>tomcat</server>-->
<!--<username>manager</username>-->
<!--<password>manager.123</password>-->
<!--<path>/</path>-->
<uriEncoding>UTF-8</uriEncoding>
<path>/${project.module.name}</path>
<port>8866</port>
</configuration>
</plugin>

<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty-version}</version>
<configuration>
<jvmArgs>-Dfile.encoding=UTF-8</jvmArgs>
<systemProperties>
<systemProperty>
<name>jetty.port</name>
<value>9083</value>
</systemProperty>
<systemProperty>
<name>org.eclipse.jetty.server.Request.maxFormContentSize</name>
<value>-1</value>
</systemProperty>
</systemProperties>
<stopKey>stop</stopKey>
<stopPort>5599</stopPort>
<webAppConfig>
<contextPath>/${project.module.name}</contextPath>
<parentLoaderPriority>true</parentLoaderPriority>
</webAppConfig>
<scanIntervalSeconds>0</scanIntervalSeconds>
</configuration>
</plugin>
</plugins>

 4.這樣在本地就可以運用自己配置的容器運行了,成功之后子模塊會有以下標志。

5.如果需要對子模塊發布到生產上,需要子模塊設置packaging為war,在父模塊先mvn install(因為對其他模塊有依賴),然后在mvn package,之后將生成的war包放在生產就OK了。

 

 

 

延伸一點:

使用Spring Boot自帶的Tomcat開發,不做如上操作,該如何部署Spring Boot項目呢,有兩種方式:

一:將Spring Boot項目生成一個jar包,然后通過。

1.cmd進入到Spring Boot項目打包成的jar文件目錄
2.運行java -Xms128m -Xmx256m -jar 項目jar名.jar

nohup /opt/appstack/java/bin/java -Xms128m -Xmx256m -jar /opt/appstack/apps/test/release/eureka-center.jar &

3.訪問項目中定義的路徑

二:通過Docker來部署。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM