spring boot 的两种部署方式

it2023-03-01  76

spring boot 的两种部署方式

一、 jar包部署

依赖和代码分离 可以实现当依赖没有变更的时候 只用上传代码块即可,如果依赖有新增 可以仅仅上传新增的依赖即可 在pom文件中加入如下插件 <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <layout>ZIP</layout> <includes> <!-- 设置没有jar包--> <include> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> #依赖输出地址 <outputDirectory>${project.build.directory}/libs</outputDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> </plugin> </plugins> 部署服务,在目录下建立对应文件夹 1)config --> 放对应的配置文件 2)logs --> 放日志数据 3)lib --> 放依赖 jar包可以放在与上述目录同一级,然后使用脚本启动服务,可以根据需求更改自己对应的脚本内容 #!/bin/bash #该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用。 # #Author: jacky, Date: 2017/1/7 # #警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。 #在杀死进程前,未作任何条件检查。在某些情况下,如程序正在进行文件或数据库写操作, #可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本, #增加在执行kill命令前的一系列检查。 # # ################################### #环境变量及程序执行参数 #需要根据实际环境以及Java程序名称来修改这些参数 ################################### #JDK所在路径 #JAVA_HOME="/usr/share/jdk1.7.0_80" JAVA_HOME="/usr/local/jdk1.8.0_171" #执行程序启动所使用的系统用户,考虑到安全,推荐不使用root帐号 RUNNING_USER=dev #Java程序所在的目录(获取执行上一级目录,目的是为了获取程序的根目录) APP_HOME=$(cd `dirname $0`; pwd) JAR_PATH=$APP_HOME/dps-1.0.jar JOBS_PATH=$APP_HOME/libs LOG_DIR=$APP_HOME/logs CLASSPATH=$CLASSPATH:.:$APP_HOME/config:$JOBS_PATH #需要启动的Java主程序(main方法类) APP_MAINCLASS=$JAR_PATH export LANG="en_US.UTF-8" #export SPARK_DIST_CLASSPATH=$(hadoop classpath) #拼凑完整的classpath参数,包括指定lib目录下所有的jar #for i in "$APP_HOME"/lib/*.jar; # do # CLASSPATH="$CLASSPATH":"$i" #done # CLASSPATH=$CLASSPATH:.; # export CLASSPATH #java虚拟机启动参数 JAVA_OPTS="-Xmx4096m -Djava.awt.headless=true -XX:MaxPermSize=128m" ################################### #(函数)判断程序是否已启动 # #说明: #使用JDK自带的JPS命令及grep命令组合,准确查找pid #jps 加 l 参数,表示显示java的完整包路径 #使用awk,分割出pid ($1部分)及Java程序名称($2部分) ################################### #初始化psid变量(全局) psid=0 checkpid() { javaps=`$JAVA_HOME/bin/jps -l | grep $JAR_PATH` if [ -n "$javaps" ]; then psid=`echo $javaps | awk '{print $1}'` else psid=0 fi } ################################### #(函数)启动程序 # #说明: #1. 首先调用checkpid函数,刷新$psid全局变量 #2. 如果程序已经启动($psid不等于0),则提示程序已启动 #3. 如果程序没有被启动,则执行启动命令行 #4. 启动命令执行后,再次调用checkpid函数 #5. 如果步骤4的结果能够确认程序的pid,则打印[OK],否则打印[Failed] #注意:echo -n 表示打印字符后,不换行 #注意: "nohup 某命令 >/dev/null 2>&1 &" 的用法 ################################### start() { echo "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 >/dev/null 2>&1 &" #JAVA_CMD="nohup java -jar $APP_HOME/libs/metering2source-server.jar >$LOGDIR/log.txt 2>&1 &" #JAVA_CMD="nohup java -jar -Dloader.path=$JOBS_PATH -DLOG_DIR=$LOG_DIR -Dspring.profiles.active=test $JAR_PATH >out.file 2>&1 &" #$JAVA_CMD nohup /usr/local/jdk1.8.0_171/bin/java -jar -Xmx4096M -Xms1024M -Dloader.path=$JOBS_PATH -DLOG_DIR=$LOG_DIR -Dspring.profiles.active=test $JAR_PATH >out.file 2>&1 & #su - $RUNNING_USER -c "$JAVA_CMD" checkpid if [ $psid -ne 0 ]; then echo "(pid=$psid) [OK]" else echo "[Failed]" fi fi } ################################### #(函数)停止程序 # #说明: #1. 首先调用checkpid函数,刷新$psid全局变量 #2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行 #3. 使用kill -9 pid命令进行强制杀死进程 #4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $? #5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed] #6. 为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用stop)。 #注意:echo -n 表示打印字符后,不换行 #注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值 ################################### stop() { checkpid if [ $psid -ne 0 ]; then echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) " kill -9 $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 } ################################### #(函数)检查程序运行状态 # #说明: #1. 首先调用checkpid函数,刷新$psid全局变量 #2. 如果程序已经启动($psid不等于0),则提示正在运行并表示出pid #3. 否则,提示程序未运行 ################################### 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 "****************************" } ################################### #读取脚本的第一个参数($1),进行判断 #参数取值范围:{start|stop|restart|status|info} #如参数不在指定范围之内,则打印帮助信息 ################################### case "$1" in 'start') start ;; 'stop') stop ;; 'restart') stop start ;; 'status') status ;; 'info') info ;; *) echo "Usage: $0 {start|stop|restart|status|info}" ;; esac exit 1

二、war包部署

war包部署成功后 ,可以对需要更新的代码单个文件进行上传,直接替换 该目录下对应的文件即可,比如tomcat安装在/opt/tomcat目录下 则代码的地址为: /opt/tomcat/webapps/burylogs/WEB-INF/classes 本地打包需要上传编译过的代码,具体目录为target下的classes目录下

1.修改相关配置文件

在application.properties这个文件中加配置 server.contextPath=/load 【项目名】修改Application方法 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class LoadApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(LoadApplication.class); } public static void main(String[] args) { SpringApplication.run(LoadApplication.class, args); } } 修改pom文件,移除spring-boot-starter-web里面的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

<!-- tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>

4)build中添加war包的名称

<build> <finalName>test</finalName> </build> 上传文件进行部署 1) 上传文件 rz -y -e 上传war包 上传路径为【服务器为10.20.23.19 路径为/opt/tomcat/webapps】 2) 启动tomcat /opt/tomcat/bin/startup.sh 查看tomcat启动日志 tail -f /opt/tomcat/logs/catalina.out关闭tomcat 的两种方式 (1) 查找tomcat进程: ps -ef|grep tomcat 查看pid, kill -9 pid2 (2)在 /bin/中执行 ./shutdown.sh再执行 ./startup.sh --重启服务
最新回复(0)