SpringBoot手動部署到Tomcat和自動化熱部署
前言:
在Eclipse中使用springboot專案,執行只需要直接右鍵預設的啟動類DemoApplication.java ,Run As -->Spring Boot App即可。
但是我們想把專案的war包部署到伺服器的tomcat中,那麼就必須做一些修改
部署到tomcat
環境:
本地:Eclipse、SpringBoot2.1.2、Maven
伺服器:CentOs7 JDK1.8 Tomcat9.10
1.修改打包方式為war
在pom.xml中修改:
<packaging>war</packaging>
2.移除嵌入式tomcat外掛
在pom.xml裡找到spring-boot-starter-web依賴節點,將其修改成如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
因為spring-boot-starter-web中依賴了spring-boot-starter-tomcat,而我們現在是使用伺服器上的tomcat,自然要排除這個預設的,所以為了讓打包的war包小一些,新增如上程式碼
3.新增servlet依賴
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
4.我們需要類似於web.xml的配置方式來啟動spring上下文,在DemoApplication類的同級新增一個SpringBootStartApplication類,繼承SpringBootServletInitializer。其程式碼如下:
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意這裡要指向原先用main方法執行的Application啟動類
return builder.sources(DemoApplication.class);
}
}
5. 打包部署
在專案根目錄下(即包含pom.xml的目錄),在命令列裡輸入: mvn clean package,或者專案右鍵Run As ->Maven install
然後把target目錄下的war包放到tomcat的webapps目錄下,啟動tomcat
訪問:http://localhost:[埠號]/[打包專案名]/
注意:這個打包專案名是指你的war包名稱,一般我們會編成xxxServer-0.0.1-SNAPSHOT, 所以訪問路徑為:
http://ip:8080/xxxServer-0.0.1-SNAPSHOT/xxx
如果需要在springboot中加上request字首,需要在application.properties或者application.yml中新增server.contextPath=/prefix/即可。其中prefix為字首名。
但是這個字首會在war包中失效,取而代之的是war包名稱(類似於xxxServer-0.0.1-SNAPSHOT),如果war包名稱和prefix相同的話,那麼除錯環境和正式部署環境就是一個request地址了
配置自動化部署
上面的方法只是打包war包,每次都要受到上傳tomcat,並重啟tomcat。過於繁瑣.
我們使用tomcat的maven外掛完成自動部署,和這篇文章類似,可以參考:https://blog.csdn.net/wcc27857285/article/details/82768550
1.修改伺服器上tomcat/conf/tomcat-user.xml ,在最後加上如下內容
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="password" roles="manager-script"/>
<user username="root" password="password" roles="manager-gui"/>
2.修改tomcat/webapps/manager/META-INF/context.xml
因為tomcat的manager頁面是預設只能本機訪問,所以還需要修改下usr/local/tomcat/webapps/manager/META-INF/context.xml 配置檔案
將Context節點下的Value節點註釋即可
或者加入你的本地機器的ip:101.71.45.321,如下圖:
然後重啟下tomcat,訪問下http://serverip:port/manager/html試試,若配置正確,應該能訪問該頁面
3.在pom.xml檔案下加入外掛
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8082</port>
<url>http://xxx.xx.xx.xx:8082/manager/text</url>
<username>kevin</username>
<password>123456</password>
<path>/webapp</path> <!-- 應用的部署位置 -->
<update>true</update>
</configuration>
</plugin>
</plugins>
username 和password和tomcat-user.xml中配置的一致
4.部署
如果是第一次部署,執行mvn tomcat7:deploy進行自動部署(對於tomcat8,9,也是使用tomcat7命令),如果是更新了程式碼後重新部署更新,執行mvn tomcat7:redeploy。
如果第一次部署使用mvn tomcat7:redeploy,則只會執行上傳war檔案,伺服器不會自動解壓部署。如果路徑在tomcat伺服器中已存在並且使用mvn tomcat7:deploy命令的話,上面的配置中一定要配置<update>true</update>,不然會報錯。
部署後訪問下http://serverip:port/[專案名] ,成功!
遇到的問題:
eclipse-->run as -->maven install
報錯:No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
提示找不到能改編譯的工具,編譯必須用到開發工具,也就是jdk,jre是執行環境,並不具備編譯功能。
解決方法:專案右鍵--> build path --> libraries -->選擇jre -->edit-->選擇jdk,如下圖
2.eclipse -->run as ->maven build-> tomcat7:deploy 時報錯
[INFO] --- tomcat7-maven-plugin:2.2:deploy (default-cli) @ RestApi ---
[INFO] Deploying war to http://localhost:8080/
Uploading: http://localhost:8080/manager/text/deploy?path=%2F
[INFO] I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error
這個是因為在webapps下已經存在了這個專案。無法執行覆蓋更新命令,需要執行redeploy命令才可以覆蓋更新。或者執行undeploy先解除安裝存在的專案,然後再執行deploy即可。
3.eclipse -->run as ->maven build-> tomcat7:deploy
相關文章
- springboot 配置熱啟動 不需重啟自動部署Spring Boot
- 將springboot部署到tomcatSpring BootTomcat
- Jenkins+Docker+Gitee+SpringBoot自動化部署JenkinsDockerGiteeSpring Boot
- Eclipse/tomcat 如何實現應用熱部署和熱啟動EclipseTomcat熱部署
- springboot專案部署到tomcat容器Spring BootTomcat
- 華納雲:如何實現tomcat自動化部署Tomcat
- Jenkins + Docker + Gitee自動化部署SpringBoot應用JenkinsDockerGiteeSpring Boot
- springboot開啟自動部署devtoolsSpring Bootdev
- Maven 自動化部署Maven
- Maven自動化部署Maven
- Jenkins自動化部署SpringBoot多模組專案JenkinsSpring Boot
- springboot docker jenkins 自動化部署並上傳映象Spring BootDockerJenkins
- SpringBoot專案如何打包部署到tomcat中去Spring BootTomcat
- k8s自動化部署springcloud、springboot指令碼K8SGCCloudSpring Boot指令碼
- springboot熱部署Spring Boot熱部署
- 阿里出品!SpringBoot應用自動化部署神器,IDEA版Jenkins?阿里Spring BootIdeaJenkins
- vue自動化部署指令碼Vue指令碼
- .NET網站自動化部署網站
- Jenkins 自動化(CI/DI)部署Jenkins
- vue 自動化部署 jenkins 篇VueJenkins
- Python自動化部署工具-FabricPython
- Mysql5.6 自動化部署MySql
- Docker 之 Jenkins自動化部署DockerJenkins
- jenkins+git+maven+tomcat 實現自動打包部署JenkinsGitMavenTomcat
- SpringBoot熱部署加持Spring Boot熱部署
- 使用travis-ci自動部署Hexo到github和codingHexoGithub
- hexo使用jenkins自動部署到阿里雲HexoJenkins阿里
- [自動化]基於kolla的自動化部署ceph叢集
- 使用JulieOps管理Kafka自動化部署?Kafka
- devops系統自動化部署流程dev
- GitLab + Jenkins + ACK 自動化部署方案GitlabJenkins
- 如何做Serverless自動化部署Server
- 陷入jenkins自動化部署的坑Jenkins
- 基於Jenkins Pipeline自動化部署Jenkins
- Docker 之 Spring Boot 自動化部署DockerSpring Boot
- SpringBoot專案熱部署Spring Boot熱部署
- SpringBoot 實現熱部署Spring Boot熱部署
- springboot實現熱部署Spring Boot熱部署