spring boot框架内嵌了tomcat/jetty(可以自行配置使用哪种web容器或者不使用),使用spring-boot-maven-plugin插件将项目打成可执行jar包便能够使用java -jar的命令完成部署。以下介绍如何利用maven打包项目然后将项目部署至服务器上。
以下将使用系列博客中第一篇博客的eureka项目作为例子:
1、修改pom.xml:
4.0.0
com.deng.site
eurekaserver
0.0.1-SNAPSHOT
jar
eurekaserver
Eureka server
org.springframework.cloud
spring-cloud-starter-parent
Camden.SR7
org.springframework.cloud
spring-cloud-starter-eureka-server
1.4.0.RELEASE
org.springframework.boot
spring-boot-maven-plugin
其中:
eurekaserver
0.0.1-SNAPSHOT
jar
定义了项目最终以jar的形式打包,最终包的名字是eurekaserver-0.0.1-SNAPSHOT.jar。
org.springframework.boot
spring-boot-maven-plugin
表示使用spring-boot-maven-plugin插件,该插件能够将spring boot应用打包为可执行的jar或war文件,打的包里会有maven依赖的jar包和spring boot的启动类,因此打成的包会比较大。
2、对项目打包:
方法一:如果在本地安装了maven,那么可以直接用cmd/终端进入项目根目录使用mvn package命令(最好先mvn clean一下)打包;
方法二:intellij内嵌了maven,可以直接选择对项目执行maven命令。
3、使用Xftp工具将打成的包传至服务器:
4、使用xshell启动项目
第一种:直接进入jar包目录,执行命令:nohup java -jar onlile-1.0.0-SNAPSHOT.jar &
第二种:创建项目服务启动脚本,通过./server.sh start启动jar包,项目./server.sh stop停止jar包
首先,在jar包所在目录新建server.sh脚本文件,其内容如下:
#!/bin/bash
cd `dirname $0`
CUR_SHELL_DIR=`pwd`
CUR_SHELL_NAME=`basename ${BASH_SOURCE}`
#修改这里jar包名即可
JAR_NAME="xxxxxx.jar"
JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME
#JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
JAVA_MEM_OPTS=""
#SPRING_PROFILES_ACTIV="-Dspring.profiles.active=dev"
SPRING_PROFILES_ACTIV=""
LOG_DIR=$CUR_SHELL_DIR/logs
LOG_PATH=$LOG_DIR/${JAR_NAME}.log
echo_help()
{
echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
}
if [ -z $1 ];then
echo_help
exit 1
fi
if [ ! -d "$LOG_DIR" ];then
mkdir "$LOG_DIR"
fi
if [ ! -f "$LOG_PATH" ];then
touch "$LOG_DIR"
fi
if [ "$1" == "start" ];then
# check server
PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
if [ -n "$PIDS" ]; then
echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."
exit 1
fi
echo "Starting the $JAR_NAME..."
# start
nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &
COUNT=0
while [ $COUNT -lt 1 ]; do
sleep 1
COUNT=`ps --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`
if [ $COUNT -gt 0 ]; then
break
fi
done
PIDS=`ps --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`
echo "${JAR_NAME} Started and the PID is ${PIDS}."
echo "You can check the log file in ${LOG_PATH} for details."
elif [ "$1" == "stop" ];then
PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
if [ -z "$PIDS" ]; then
echo "ERROR:The $JAR_NAME does not started!"
exit 1
fi
echo -e "Stopping the $JAR_NAME..."
for PID in $PIDS; do
kill $PID > /dev/null 2>&1
done
COUNT=0
while [ $COUNT -lt 1 ]; do
sleep 1
COUNT=1
for PID in $PIDS ; do
PID_EXIST=`ps --no-heading -p $PID`
if [ -n "$PID_EXIST" ]; then
COUNT=0
break
fi
done
done
echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
else
echo_help
exit 1
fi
其中只需修改包名,即JAR_NAME的属性值即可。
然后为其添加执行权限,其命令如下:
chmod +x server.sh
启动jar包,命令:
./server.sh start
停止 jar包,命令:
./server.sh stop
如果执行启动命令,报错:-bash: ./server.sh: /bin/bash^M: bad interpreter: No such file or directory
执行命令:sed -i "s/\r//" server.sh
然后重新执行启动命令即可。原因是:通过复制到文档中编写,需要转换一下。
5、外网访问服务器启动的eureka服务
访问地址:服务器公网IP:eureka服务设置的端口
注:如果外网不能访问
第一:查看端口是否配置了安全组:入方向、出方向
第二:查看端口是否添加了放通策略
通过命令:iptables -L -n 命令查看端口是否放通;
通过命令:iptables -I INPUT 5 -p tcp --dport 端口 -j ACCEPT 添加端口放通策略。