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

來源:互聯網
上載者:User

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

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 -jar 項目jar名.jar
3.訪問項目中定義的路徑

二:通過Docker來部署。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.