springboot war包部署過程詳解
正文
應用在共有云上的時候是打成fatjar, 通過內(nèi)嵌tomcat啟動的. 在私有云上需要部署在一個進程中, 通過打成war包托管給tomcat啟動.
1. 代碼
首先, Application啟動類需要繼承SpringBootServletInitializer并重寫configure方法, sources的入?yún)锳pplication.class.
2. pom
<packaging>${project.packaging}</packaging>
<profiles>
<profile>
<id>jar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<project.packaging>jar</project.packaging>
</properties>
</profile>
<profile>
<id>war</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
</plugin>
</plugins>
</build>
<properties>
<project.packaging>war</project.packaging>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</profile>
</profiles>在pom文件中通過profile控制打包行為, -Pwar時打成war包.
3. tomcat
tomcat10由于servlet被捐獻后包名改成了jakarta, 需要升版本和修改依賴, 改動有點大, 因此選擇tomcat9, 或者tomcat8.
4. context
注意war包名字修改為了ROOT, 默認情況下, 如果不是ROOT, 那么url會帶上該名字作為context進行路由, 例如原本的地址為http://127.0.0.1:8080/test, 會變成http://127.0.0.1:8080/app/test.
如果帶上context, 一些靜態(tài)資源由于是絕對路徑會找不到, 一些filter路徑匹配也需要修改, 改動較大, 因此去除context規(guī)避這些問題.
tomcat也支持通過修改conf/server.xml來去除context, 這里簡單起見采用了重命名為ROOT的方式.
如果應用沒有提供http服務, 或者使用的是相對路徑, 配置上也通過*進行路徑匹配, 那么就不需要重命名.
5. 多端口
但一個端口內(nèi)只有一個應用可以不帶context, 如果多個應用都需要不帶context, 那么就需要通過端口進行路由.
修改tomcat的conf/server.xml, 每個端口對應都添加一段如下配置, 注意name和appBase需不同, 這個配置port為8081
<Service name="Catalina1">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine defaultHost="localhost" name="Catalina1">
<Host appBase="webapps1" autoDeploy="true" name="localhost" unpackWARs="true"/>
</Engine>
</Service>6. tomcat啟停
./bin/startup.sh ./bin/shutdown.sh
7. 其他
因為我們的項目都自定義了日志打印, 所以可以去掉tomcat的日志打印, 修改/bin/catalina.sh, 把CATALINA_OUT指向/dev/null.
同樣修改/bin/catalina.sh, 往JAVA_OPTS中添加skywalking所需要的agent等命令, 但是由于多個項目被集成在一個進程中, 只能有一個名字. 遠程debug同理.
JAVA_OPTS="$JAVA_OPTS -javaagent:/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=app -Dskywalking.collector.backend_service=1127.0.0.1:11800"
以上就是springboot war包部署過程詳解的詳細內(nèi)容,更多關于springboot war包部署的資料請關注腳本之家其它相關文章!
相關文章
Spring Boot 與 Kotlin 使用JdbcTemplate連接MySQL數(shù)據(jù)庫的方法
本文介紹在Spring Boot基礎下配置數(shù)據(jù)源和通過 JdbcTemplate 編寫數(shù)據(jù)訪問的示例。感興趣的朋友跟隨腳本之家小編一起學習吧2018-01-01
Spring 異步執(zhí)行器(Executor)配置策略與命名實踐
這篇文章主要介紹了Spring 異步執(zhí)行器(Executor)配置策略與命名實踐,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2026-02-02
Java之多個線程順序循環(huán)執(zhí)行的幾種實現(xiàn)
這篇文章主要介紹了Java之多個線程順序循環(huán)執(zhí)行的幾種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
如何獲取springboot打成jar后的classpath
這篇文章主要介紹了如何獲取springboot打成jar后的classpath問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

