项目本地前后台已经联通 ,前端已经部署到阿里云的nginx上:
今天部署后端 ,项目后端使用springboot mybits mysql redis开发 ,github地址: https://github.com/lilelife/webapp
springboot 内置tomcat jetty所以打包jar 直接java- jar包就行
因为是多 module开发 两个包 ,一个common 一个userService服务 ,多模块开发需要注意指明模块之间的依赖关系
项目完整结构如下。
其中 common只是存储实体类或工具类,所以其pom文件中不需要加入打包插件 ,即不包含 <build></build>。
而UserService 是包含controller的springboot 主main函数的服务,需要打包,其pom 插件如下:
<build>
<finalName>UserService</finalName>
<plugins>
<!-- 编码和编译和JDK版本 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 所需要的依赖包都打进来-->
<goal>build-info</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.lile.SpringbootApplication</mainClass> <!--指定主入口 main函数-->
<addResources>false</addResources>
</configuration>
</plugin>
<!--mybits generator -->
<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>
</build>
父pom需要加入maven打包插件 ,内容如下;
<build>
<plugins>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</plugins>
总结就是, 父pom 和 包含springboot的mian函数的模块在pom中需要加入打包插件,其他的工具类的模块不需要。
启动工程,测试查看模块之间的调用是否正常。
打包:
maven 中 主工程目录下lifecycle-> 先clean ,->package
这里 的Lifecycle 和plugins的区别是 lifecycle周期更长 使用这个就行了。
打包显示 :Error:(43,66) java: -source 1.6 中不支持 lambda 表达式
设置 language为1.8
要注意 项目多余的import 类 需要删除 ,不然打包时候会包找不到该类
打包成功:
springboot 模块的 target目录下查看:
部署到阿里云服务器上,
服务器安装 jdk 1.8
创建目录
cd /usr
mkdir webapp
chown 777 webapp
上传jar包
此时可以 java -jar UserService.jar 运行 测试
部署成功。
阿里云添加安全端口
访问:
2、shell脚本启动
java -jar bootdo.jar 启动的话 控制台关闭就关闭
使用 java -jar XXX.jar & // 窗口关闭停止 & 表示后台
nohup java -jar XXX.jar & // 不挂断运行 窗口 账户退出都运行。
nohup java -jar XXX.jar >temp.txt & //输出内容重定向到temp.txt中
定义 shell脚本
touch w.sh
vim w.sh
#i 编写
#!/bin/sh
APP_NAME=product-service
#jar包路径
JAR_PATH='/usr/webapp'
#jar名称
JAR_NAME=UserService.jar
#日志路径
LOG_PATH='/usr/webapp/logs'
#PID 代表是PID文件
PID=$JAR_NAME\.pid
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo ">>> $APP_NAME is already running PID=${pid} <<<"
else
nohup java -Xms256m -Xmx512m -jar $JAR_PATH/$JAR_NAME >> $LOG_PATH/$APP_NAME.log 2>&1 &
echo $! > $PID
echo ">>> start $APP_NAME successed PID=$! <<<"
fi
}
#停止方法
stop(){
#is_exist
pidf=$(cat $PID)
#echo "$pidf"
echo ">>> PID = $pidf begin kill $pidf <<<"
kill $pidf
rm -rf $PID
sleep 2
is_exist
if [ $? -eq "0" ]; then
echo ">>> PID = $pid begin kill -9 $pid <<<"
kill -9 $pid
sleep 2
echo ">>> $APP_NAME process stopped <<<"
else
echo ">>> $APP_NAME is not running <<<"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo ">>> $APP_NAME is running PID is ${pid} <<<"
else
echo ">>> $APP_NAME is not running <<<"
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
exit 0
使用 sh w.sh start|stop|restart 启动 停止 重启
日志在 logs 目录,需要给权限
mkdir logs
chown 777 logs/
成功。