Spring Boot支持傳統部署和更現代的部署形式。jar跟war都支持,這裏參考springboot參考手冊學習記錄html
springboot項目支持建立可執行Jar,參考手冊第11.5. Creating an Executable Jar就有對這樣的介紹,我這裏充當一回搬運工(你們好,我是大天然勤勞的搬運工~~):mysql
咱們經過建立一個徹底自包含的可執行jar文件來完成咱們的示例,該文件能夠在生產環境中運行。可執行jar(有時稱爲「胖jar」)是包含編譯類和代碼須要運行的全部jar依賴項的歸檔文件linux
要建立一個可執行jar,咱們須要將spring-boot-maven-plugin添加到咱們的pom.xml中。爲此,在dependencies部分下面插入如下幾行:git
<!--構建工具--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
若是須要制定jar包名稱、生成路徑,以及跳過測試github
<!--構建工具--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 文件名以及輸出路徑--> <configuration> <finalName>${project.artifactId}</finalName> <outputDirectory>../package</outputDirectory> </configuration> </plugin> <!-- 跳過啓動測試 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration> </plugin> </plugins> </build>
若是是在父類的pom文件進行統一管理,而後子類引入父類,這須要加pluginManagement標籤web
<!--構建工具--> <build> <pluginManagement>
... </pluginManagement> </build>
2019-08-23補充:以前打包都是一個多個工程管理,在父類的pom文件配置這個,打包會在目錄下面生成,由於用的是../packagespring
最近打包一個單獨的項目,路徑我改爲package,沒有../了,打包後並無在項目下面生成package目錄,jar不知道打去哪了。。。我全局搜也搜不出來sql
後面改爲絕對路徑F:/package,終於有jar包了,但文件名不對,咱們明明設置讀取的是${project.artifactId},但打出來仍是帶上了版本號。。。,緣由暫時未知
可使用命令行來打包,或者使用Maven Projects來打包
打包成功,在target目錄下就會看到jar包
要運行該應用程序,cmd命令,進入到jar所在路徑文件,使用 java -jar 命令;win下直接雙擊用java方式打開便可運行(Ctrl+C退出)
那麼Linux下面如何部署運行呢?
=====Linux部署命令======
0、查看運行的項目 pgrep java | xargs ps 1、先kill掉舊服務 pkill -f myspringboot-0.0.1-SNAPSHOT 2、後臺啓動新服務(nohup後臺運行,&後臺運行的區別: 使用nohup運行程序: 結果默認會輸出到nohup.out 使用Ctrl + C發送SIGINT信號,程序關閉 關閉session發送SIGHUP信號,程序免疫 使用&後臺運行程序: 結果會輸出到終端 使用Ctrl + C發送SIGINT信號,程序免疫 關閉session發送SIGHUP信號,程序關閉 ) nohup java -jar /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.jar & 如需輸出日誌 nohup java -jar /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.jar > /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.log & 3、查看日誌 tail -f /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.log
2019-07-08補充:
1、當咱們打包後上傳Linux服務器,發現有些代碼還須要修改,從新打包、上傳又比較慢,若是隻是少許代碼,而且是前端代碼、配置文件等,那麼咱們能夠直接修改jar包內容
一、先cd進到jar位置,而後使用 vim 命令進入jar包
二、使用 / 命令模糊搜索定位文件,例如main.js
三、按回車進入文件,修改完成後使用 :wq 保存退出文件,回到jar包目錄,使用 :q 退出jar包,便可成功修改文件內容
PS:修改jar,重啓生效
2、若是咱們須要改動的是後端java代碼,那麼我就須要在本地改好後從新編譯代碼,把對應的java、class文件都替換到jar包
springboot項目支持建立一個可部署的War文件,參考手冊第92.1 Create a Deployable War File就有對這樣的介紹,我這裏充當一回搬運工(你們好,我是大天然勤勞的搬運工~~):
因爲Spring WebFlux並不嚴格依賴於Servlet API,而且應用程序默認部署在嵌入式反應器Netty服務器上,因此WebFlux應用程序不支持War部署。
生成可部署war文件的第一步是提供SpringBootServletInitializer子類並覆蓋其配置方法。這樣作能夠利用Spring Framework的Servlet 3.0支持,讓您在Servlet容器啓動應用程序時配置它。一般,您應該更新應用程序的主類以擴展SpringBootServletInitializer,同時,要將Spring應用程序部署到外部服務器,必須確保servlet初始化器直接實現WebApplicationInitializer(即便是從已經實現它的基類擴展而來)。以下例所示:
@SpringBootApplication public class MyspringbootApplication extends SpringBootServletInitializer implements WebApplicationInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MyspringbootApplication.class); } public static void main(String[] args) { SpringApplication.run(MyspringbootApplication.class, args); } }
在建立springboot項目時,默認是jar包,若是是想要打成war包,須要修改pom.xml,打包方式跟生成路徑跟jar的同樣,過程的最後一步是確保嵌入的servlet容器不會干擾部署war文件的servlet容器。爲此,須要將嵌入式servlet容器依賴項標記爲所提供的。
<!--默認jar--> <packaging>war</packaging> <!-- 如需打成war包 確保嵌入的servlet容器不會干擾部署war文件的servlet容器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!--構建工具--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
獲得war包後把它丟到服務容器裏(放在webapps文件夾下)run起來就好了,要注意的是使用了外部容器,要記得改Tomcat的端口,在server.xml的Connector節點
友情翻譯:若是使用Spring引導構建工具,將嵌入的servlet容器依賴項標記爲提供,將生成一個可執行的war文件,並將提供的依賴項打包在lib提供的目錄中。這意味着,除了能夠部署到servlet容器以外,還能夠在命令行上使用java -jar運行應用程序。
打成war包丟到服務器裏面運行啓動報錯,還不知道是什麼問題,都是照着參考手冊來的...,先記錄到這裏;推薦直接使用jar的方式運行,war報錯的緣由,有空再去研究。
2019-06-24補充:我將咱們前面寫的IM系統按照步驟打成war包,但啓動Tomcat報錯
2019-07-12補充,後面看文檔後發現,咱們漏了一下東西,若是使用Logback,還須要告訴WebLogic選擇打包版本,而不是預先安裝在服務器上的版本。而SpringBoot默認使用Logback,同時,以前咱們也漏了 implements WebApplicationInitializer
將全部的東西都補全後仍是報錯...
上網查了一下,說兩種問題:一、Tomcat問題,二、jar包問題
咱們以前的Tomcat版本是apache-tomcat-7.0.53,去官網看來下,只支持6 and later(7 and later for WebSocket)
但咱們項目用的jdk版本是1.8.0_131,須要9.0.x版的Tomcat才支持,直接下載最新版Tomcat
成功啓動
PS:
一、因爲使用外部服務器,咱們在項目的配置文件配置的server.port=10081已經沒有用了,端口信息須要咋Tomcat的server.xml進行配置
<Connector port="10081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
二、解決Tomcat中文亂碼,修改conf/logging.properties
java.util.logging.ConsoleHandler.encoding = GBK
三、爲了安全,webapps只保留項目文件
四、Tomcat的本質是文件夾,默認配置下訪問項目要加war包名稱,例如: :端口/war包名/路徑
這是由於咱們server.xml的host節點的默認appBase="webapps"
新增一個默認訪問路徑就能夠不用加war包名稱了,例如:
而後就能夠這樣訪問了
到這裏war包啓動報錯的問題終於解決!
2019-08-26補充:補充一下如何雲安裝java的jdk,以及mysql數據庫,這裏主要參考如下博客文章(親測可用):
linux在線安裝JDK(1.8版本):https://blog.csdn.net/zxb730916/article/details/80899429?tdsourcetag=s_pctim_aiomsg
Linux之yum安裝MySQL:https://www.jianshu.com/p/136003ffce41
jdk
//查看是否已安裝JDK,卸載 yum list installed |grep java //卸載CentOS系統Java環境 // *表時卸載全部openjdk相關文件輸入 yum -y remove java-1.8.0-openjdk* // 卸載tzdata-java yum -y remove tzdata-java.noarch //列出java環境安裝包 yum -y list java* // 安裝JDK,若是沒有java-1.8.0-openjdk-devel就沒有javac命令 yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
使用 java -version 查看版本號確認是否安裝成功
mysql
下載、安裝
//下載 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm //安裝 yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server
啓動、配置
//啓動 systemctl start mysqld.service //查看root初始密碼 grep "password" /var/log/mysqld.log //使用root登陸mysql mysql -uroot -p //設置安全級別 set global validate_password_policy=0 //默認密碼長度爲8,能夠設置爲其它值,最小4位 set global validate_password_length=4 //修改root密碼 ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'; //可視化工具的登陸受權:(若是受權不成功,請查看防火牆) grant all on *.* to root@'%' identified by 'root';
配置到這裏就可使用數據庫工具去鏈接操做數據庫了
代碼已經開源、託管到個人GitHub、碼雲: