Java項目部署(后端)
前言jar包和war包啟動區別
-
jar包:執行SpringBootApplication的run方法,啟動IOC容器,然后創建嵌入式Servlet容器
-
war包: 先是啟動Servlet服務器,服務器啟動Springboot應用(springBootServletInitizer),然后啟動IOC容器
一、Liunx war包部署:
1.部署環境:
- jdk
- tomcat
- 其余環境自行配置(諸如:redis,activeMq,mySql)
2.將項目打成war包並使用工具上傳
-
1.如果是springboot/springCloud項目需要修改啟動類下面的 pom.xml文件
-
修改打包方式 (不存在可以自定義添加)
<packaging>war</packaging>
-
移除tomcat依賴
<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>
-
添加支持 外部tomcat 依賴,用於編譯和測試
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <!-- 該包只在編譯和測試的時候使用 --> <scope>provided</scope> </dependency>
-
配置啟動類Springboot和springCloud的啟動類:繼承*SpringBootServletInitializer,重寫configure,讓war包支持tomcat啟動
@Configuration @EnableAutoConfiguration @ComponentScan public class StartApplication extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApplication.run(StartApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(StartApplication.class); } }
-
注:
- 為了避免資源無法訪問可以在pom.xml中設置如下操作
<build>
<!-- 應與application.properties(或application.yml)中context-path保持一致 -->
<finalName></finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<!-- 配置java版本-->
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
- 4.使用maven 的intall指令打成war包(采用項目名即父類模塊 install 這樣可以不用考慮順序一鍵完成所有項目打包)
- 5.將打好的war上傳到tomcat 的webapps目錄下即可(可以使用WinScp連接服務進行拖拽上傳)
3.修改tomcat信息:(修改 tomcat下的conf/server.xml文件)
-
1.修改tomcat的端口號:將8080端口修改為 80(修改后如下)
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
-
2.配置虛擬路徑
<Host name="localhost" appBase="/alidata/www/" unpackWARs="true" autoDeploy="true"> <Context path="/" docBase="/alidata/www/shop" debug="0"/> <Context path="/file" docBase="/alidata/www/image" debug="0"/> <Context path="/solr" docBase="/alidata/www/solr" debug="0"/> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
<Host name="localhost" appBase="/alidata/www/"/>
- name:對應的是你項目的域名; 默認localhost即可;域名可以直接給外網配置域名即可。
- appBase :war包的存放位置:默認為:webapps在tomcat的webapps中,如果不想存儲在tomcat 的webapps文件中可以再此處修改;tomcat運行后自動部署的文件配置指的就是此處。
<Context path="/file" docBase="E:/goods" debug="0" reloadable="true" crossContext="true" />
- path: 瀏覽器訪問路徑:本地 —— localhost:端口+path
- docBase: path路徑訪問的根目錄文件:本地 —— localhost:端口+path 代表瀏覽器訪問 本地的 E盤下的goods
注:Context 標簽可以配置多個,前提是path唯一 並且服務氣的內存足夠大可以保證項目運行,即多個虛擬路徑,Context虛擬路徑;第一個Context支持 ip+"/" 也支持 ip +path值;亦或 域名+ / or 域名 + path值。
4、注意事項:
注:前后端不分離的項目或者項目前端頁面是tomcat進行虛擬映射配置需要注意。例如:項目名叫
path="/file" 使用file作為虛擬路徑,在頁面 Css和Js引入
中存在如何引入:
<link href="/file/css/perfect-scrollbar.min.css" rel="stylesheet" type="text/css" />
則上傳到服務的tomcat前需要修改為
<link href="/file/file/css/perfect-scrollbar.min.css" rel="stylesheet" type="text/css" />
因為至第一個/file 表示的是前端頁面存放的位置,E:/goods目標引入文件在 E:/goods/shop 即虛擬路徑/file替代了 E:/goods
- 解決方法 起一個和Css等引入路徑不沖突的變量為 虛擬路徑名稱
- 上傳前修改前端頁面中 Css等文件的引用路徑,即增加一個 tomcat中配置的path名稱
二、Windows 服務部署 war
操作過程大致如上
三、Linux服務部署 jar(推薦用於 springBoot,springCloud項目部署)
1.服務環境配置
- jdk
- 其余環境自行配置(諸如:redis,activeMq,mySql)
2.項目直接使用 mvn指令 install 打成jar包
3.使用遠程連接軟件(如WinScp等)拖拽上傳
4.使用指令進行項目啟動
java -jar sparrow.jar
含義:啟動sparrow.jar項目,窗口被鎖定。關閉指令框者服務關閉
推薦使用如下指令:
nohup java -jar sparrow.jar > sparrow.txt 2>&1 &
含義: 不斷執行 java sparrow.jar項目並將完整日志輸入到sparrow.txt文件中
- nohup 是linux不斷執行的意思可以保證jar啟動后可以再后台一直運行(即管理指令框項目不會關閉)
sparrow.txt 標准日志輸出的文件位置
- 2>&1 也就表示將錯誤重定向到標准輸出上(不加上 日志輸出不完整)
注:如果服務內存過小可以指定Xms(分配堆最小內存)和Xmx(最大內存) 實現服務內存資源性能最大化。
nohup java -Xms128m -Xmx512m -jar sparrow.jar > sparrow.txt 2>&1 &
- Xms分配堆最小內存,默認為物理內存的1/64;-Xmx分配最大內存,默認為物理內存的1/4。
四、Windows部署 jar包
1.服務環境配置
- jdk
- 其余環境自行配置(諸如:redis,activeMq,mySql)
2.項目直接使用 mvn指令 install 打成jar包
3.使用遠程連接軟件(如WinScp等)拖拽上傳
4.打開cmd: doc界面運行如下指令,進行項目啟動(doc界面不能關閉)
java -jar sparrow.jar
注:如果想要保證項目在后台運行,可以執行百度