SpringBoot專案部署

2020-08-13 19:56:08

springboot部署

一、通過遍歷檔案啓動springboot專案

所需檔案war包的classes和lib資料夾
將classes和lib資料夾放入同一個檔案下
windows伺服器
同時放入下方的.bat指令碼

@ECHO OFF
@ECHO STARTUP App
@ECHO 設定環境變數,回圈當前目錄下的lib目錄下所有jar檔案,並設定CLASSPATH


SET CLASSPATH=classes
FOR %%F IN (lib\*.jar) DO call :addcp %%F
goto extlibe
:addcp
SET CLASSPATH=%CLASSPATH%;%1
goto :eof
:extlibe



@ECHO
SET CLASSPATH=%CLASSPATH%;
@ECHO 
SET CLASSPATH
@ECHO 
java -server com.power.app.AppApplication

修改最後的com.power.app.AppApplication爲啓動類
LInux伺服器
同時放入sh指令碼
JAVA_HOME:jdk目錄
APP_HOME:資料夾路徑
APP_MAINCLASS:啓動類路徑

#!/bin/sh
##description: Starts, stops Netty
#
#chkconfig: 2345 20 80
#dscription: Startup script for Netty server on CentOS. Place in /etc/init.d
JAVA_HOME="/usr/java/jdk1.8.0_191-amd64"
 
RUNNING_USER=root
 
APP_HOME=/data/monitor
 
APP_MAINCLASS=com.anlyse.monitor.DiApplicationMain
 
CLASSPATH=$APP_HOME/classes
for i in "$APP_HOME"/lib/*.jar; do
   CLASSPATH="$CLASSPATH":"$i"
done
 
LOGS_DIR=$APP_HOME/logs
if [ ! -d $LOGS_DIR ]; then
    mkdir $LOGS_DIR
fi
STDOUT_FILE=$LOGS_DIR/stdout.log
 
JAVA_OPTS="-ms512m -mx2048m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=256m"
 
psid=0
 
checkpid() {
   javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`
 
   if [ -n "$javaps" ]; then
      psid=`echo $javaps | awk '{print $1}'`
   else
      psid=0
   fi
}

start() {
   checkpid
 
   if [ $psid -ne 0 ]; then
      echo "================================"
      echo "warn: $APP_MAINCLASS already started! (pid=$psid)"
      echo "================================"
   else
      echo -n "Starting $APP_MAINCLASS ..."
      JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS >$STDOUT_FILE 2>&1 &"
      su - $RUNNING_USER -c "$JAVA_CMD"
      checkpid
      if [ $psid -ne 0 ]; then
         echo "(pid=$psid) [OK]"
      else
         echo "[Failed]"
      fi
   fi
}

stop() {
   checkpid
 
   if [ $psid -ne 0 ]; then
      echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "
      su - $RUNNING_USER -c "kill -9 $psid"
      if [ $? -eq 0 ]; then
         echo "[OK]"
      else
         echo "[Failed]"
      fi
 
      checkpid
      if [ $psid -ne 0 ]; then
         stop
      fi
   else
      echo "================================"
      echo "warn: $APP_MAINCLASS is not running"
      echo "================================"
   fi
}

status() {
   checkpid
 
   if [ $psid -ne 0 ];  then
      echo "$APP_MAINCLASS is running! (pid=$psid)"
   else
      echo "$APP_MAINCLASS is not running"
   fi
}

info() {
   echo "System Information:"
   echo "****************************"
   echo `head -n 1 /etc/issue`
   echo `uname -a`
   echo
   echo "JAVA_HOME=$JAVA_HOME"
   echo `$JAVA_HOME/bin/java -version`
   echo
   echo "APP_HOME=$APP_HOME"
   echo "APP_MAINCLASS=$APP_MAINCLASS"
   echo "****************************"
}
 

case "$1" in
   'start')
      start
      ;;
   'stop')
     stop
     ;;
   'restart')
     stop
     start
     ;;
   'status')
     status
     ;;
   'info')
     info
     ;;
	*)
	echo "Usage: $0 {start|stop|restart|status|info}"
    exit 1
   ;;
   esac
   exit 0

二、放入tomcat啓動

pom檔案要除去springboot的tomcat

<!-- 打war包時加入此項, 告訴spring-boot tomcat相關jar包用外部的,不要打進去 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
<!-- springboot自帶的tomcat並沒有攜帶tomcat-embed-jasper的依賴,如果不引入tomcat-embed-jasper依賴,使用SPringboot啓動專案則會無法成功-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

啓動類要改爲以下形式

public class AppApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(AppApplication.class, args);
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(AppApplication.class);
    }

}

將war包檔案解壓放入tomcat目錄的webapps目錄下
設定Host 的appBase屬性爲空(如果不設定的話springboot專案會發生重複啓動),並新增下列程式碼

    <Context path="/" docBase="D:\QMDownload\apache-tomcat-8.0.50\webapps\power" reloadable="true" debug="0"/>

docBase的路徑爲解壓檔案的目錄
點選bin/startup.bat 即可

三、命令啓動

優點跨平臺,簡單

java -jar power-app.war --spring.profiles.active=dev

-jar 後跟專案的war包或jar包即可;
spring.profiles.active後跟的是組態檔模式,dev開發;beta測試;prod生產;
對應 application-dev.properties

Tomcat的server.xml檔案的一些屬性的含義:

Host:
appBase:啓動的預設資料夾
autoDeploy: true<當.xml檔案、war檔案發生改變時,自動重新啓動tomcat>
context:
path:存取路徑
docBase:啓動的檔案,絕對路徑或相對於appBase的路徑
reloadable:true 專案內部檔案發生變更,重新啓動專案

對比這兩種方式部署的理解:
1、整個war包或jar包啓動:
適用於產品級別的部署,或者大版本的迭代,整塊一起搞上去,也不需要在一到底改了什麼,每次部署的包可能都非常大。
2、採用解壓檔案,遍歷檔案Java啓動的方式:
適用於開發階段,測試階段,小版本的迭代,或者bug的修復,可以每次部署一個小小的檔案,部署操作簡化。