所需檔案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
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
Host:
appBase:啓動的預設資料夾
autoDeploy: true<當.xml檔案、war檔案發生改變時,自動重新啓動tomcat>
context:
path:存取路徑
docBase:啓動的檔案,絕對路徑或相對於appBase的路徑
reloadable:true 專案內部檔案發生變更,重新啓動專案
對比這兩種方式部署的理解:
1、整個war包或jar包啓動:
適用於產品級別的部署,或者大版本的迭代,整塊一起搞上去,也不需要在一到底改了什麼,每次部署的包可能都非常大。
2、採用解壓檔案,遍歷檔案Java啓動的方式:
適用於開發階段,測試階段,小版本的迭代,或者bug的修復,可以每次部署一個小小的檔案,部署操作簡化。