发布到线上的包结构

runtime是发布到线上的目录结构



1.项目pom.xml添加打包配置

<build>
<plugins> <plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>sigma.resource.sync.SigmaApplication</mainClass>
<layout>JAR</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<useDefaultDelimiters>true</useDefaultDelimiters><!-- 这是重点-->
</configuration>
<executions>
<execution>
<id>copy-fatjar</id>
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/build</outputDirectory>
<resources>
<resource>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.${project.packaging}</include>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy-bin</id>
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/build/bin</outputDirectory>
<resources>
<resource>
<directory>src/main/bin</directory>
<include>start.sh</include>
<include>stop.sh</include>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy resource</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<overwrite>true</overwrite>
<resources>
<resource>
<directory>${basedir}/src/main</directory>
<includes>
<include>*</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin> <plugin>
<artifactId>maven-clean-plugin</artifactId>
<configuration>
<filesets>
<fileset>
<directory>src/main/resources/public</directory>
</fileset>
</filesets>
</configuration>
</plugin>
</plugins> <resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources> </build>

2.创建脚本目录

src/main/bin

3.启动及停止脚本

src/main/bin/start.sh

#!/bin/bash

#----------以下变量可以在脚本中直接使用----------------
# $def_app_id 应用id
# $def_app_name 应用名称
# $def_app_domain 应用域名
# $def_app_deploy_path 兼容老部署,废弃
# $def_path_app_log 应用日志路径 如:/export/Logs/
# $def_path_app_data 如:/export/Data
# $def_group_id 分组 id
# $def_instance_id 实例id
# $def_instance_name 实例名称 server1
# $def_instance_path 实例完成路径 /export/Instances/jone/server1/
# $def_host_ip
#-------------------------- #set -o errexit
readonly APP_NAME="sigma-sync" #定义当前应用的名称
readonly JAR_VERSION="1.0-SNAPSHOT" #打包的JAR版本
#获取当前应用的进程 id
function get_pid
{
pgrep -f "$EXE_JAR"
} BASEDIR=$(cd $(dirname $0) && pwd)/.. # 获取运行脚本的上级目录 readonly JAVA_HOME="/export/servers/jdk1.8.0_60" # java home
readonly JAVA="$JAVA_HOME/bin/java"
APP_LOG_DIR="/export/Logs/sigma-sync"
mkdir -p ${APP_LOG_DIR}
EXE_JAR="$APP_NAME-$JAR_VERSION.jar"
echo "$EXE_JAR"
# FIXME: make this configurable
OPTS_MEMORY="-Xms2G -Xmx2G -server -XX:MaxPermSize=256M -Xss256K" #定义启动 jvm 的参数信息。
CLASSPATH="$BASEDIR/" [[ -z $(get_pid) ]] || {
echo "ERROR: $APP_NAME already running" >&2
exit 1
} echo "Starting $APP_NAME ...."
[[ -x $JAVA ]] || {
echo "ERROR: no executable java found at $JAVA" >&2
exit 1
}
cd $BASEDIR
setsid "$JAVA" $OPTS_MEMORY -jar "$EXE_JAR" "$@" > /dev/null 2>&1 & sleep 0.5
[[ -n $(get_pid) ]] || {
echo "ERROR: $APP_NAME failed to start" >&2
exit 1
} echo "$APP_NAME is up runnig :)"

src/main/bin/stop.sh

#!/bin/bash

set -o errexit
set -o nounset readonly APP_NAME="sigma-sync" #定义当前应用的名称
readonly JAR_VERSION="1.0-SNAPSHOT" #打包的JAR版本
EXE_JAR="$APP_NAME-$JAR_VERSION.jar"
#获取当前应用的进程 id
function get_running_pid
{
pgrep -f "$EXE_JAR"
} readonly SELF_DIR=$(cd $(dirname $0) && pwd) function stop
{
local -i timeout=20
local -i interval=1
local -r service_pid=$(get_running_pid) || true # ignore error
[[ -n $service_pid ]] || {
echo "WARNING: process not found, nothing to stop" >&2
exit 0
}
kill $service_pid
while (( timeout > 0 )) && get_running_pid > /dev/null; do
echo -n "."ƒ
sleep $interval
timeout=$(( timeout - interval ))
done
if get_running_pid > /dev/null; then
echo "WARNING: process still alive, sending SIGKILL ..." >&2
kill -9 "$service_pid"
fi
}
function main
{
get_running_pid > /dev/null || {
echo "WARNING: process not found, nothing to stop" >&2
exit 0 # Ignore error
}
stop
}
main "$@"

4.构建

mvn clean -U install -P prod -Dmaven.test.skip=true

springboot打包上线的更多相关文章

  1. springBoot 打包上线跳过连接数据库

    在pom文件下添加 <skipTests>true</skipTests> 这一行 如下: <properties> <project.build.sourc ...

  2. Xcode 8 打包上线 iTunes Connect 找不到构建版本

    Xcode 8 打包上线 iTunes Connect 找不到构建版本 最近苹果推出新的mac操作系统(macOS Sierra 10.12),大家可能都已经升级了,作为一个开发者,小编肯定是第一时间 ...

  3. springboot 打包

    springboot 打包 先clean 然后 maven package 通过命令java -jar target/GoshenWepPro-0.1.0.jar运行程序

  4. Vuejs技术栈从CLI到打包上线实战全解析

    前言 本文是自己vue项目实践中的一些总结,针对Vue2及相关技术栈,实践中版本为2.3.3. 开发前须知 vue-cli 在开发前,我们要至少通读一遍vue官方文档和API(看官方文档是最重要的,胜 ...

  5. 前端自动化(三) 合并压缩css、压缩js、添加时间戳、打包上线操作

    前端自动化(三)   合并压缩css.压缩js.添加时间戳.打包上线操作 此文在前两篇基础上对比参考,会很方便理解 gulp.task("delete",function(){ r ...

  6. springboot打包不同环境配置与shell脚本部署

    本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程序启动工具,希望能便利工作: profiles指定不同环境的配置 maven-assembly-plu ...

  7. SpringBoot打包成war

    关于SpringBoot打成jar包以及jar包如何在Linux持久运行,我在前面已经说过了,所以本次不再赘述. 关于SpringBoot打包成war,其实步骤特别简单,如下图所示(如果是jar,通常 ...

  8. vue菜鸟从业记:完成项目最后一公里之真机测试和打包上线

    最近我朋友王小闰他们公司的项目开发已经进入收尾阶段,前后端并行开发的差不多了,联调也调过了,上篇文章里也讲到了,所谓联调,就仿佛在说“我也不知道我的接口文档写的对不对,我们验证一下吧?我也不知道我的数 ...

  9. springboot打包去除资源文件,启动时指定配置文件位置,使用log4j2替换默认logback

    springboot打包时,去掉资源文件 <build> <resources> <resource> <directory>src/main/reso ...

随机推荐

  1. 2021S软件工程——结对项目第三阶段

    2021S软件工程--结对项目第三阶段 2021春季软件工程(罗杰 任健) 项目地址 1020 1169 1 实践反思 1.1 问题分析 两人习惯不一致 没有具体制定时间节点 写完代码才开始" ...

  2. 16- web测试总结

    在线用户不进行任何操作,对服务器也会产生压力.因为有会话的存在. 服务器tps与相应时间没有直接关系:每个口 关键性能指标:TPS.响应时间.并发数.思考时间.资源利用率(内存.cpu.磁盘).pv. ...

  3. 【SpringBoot】SpringBoot2.x整合定时任务和异步任务处理

    SpringBoot2.x整合定时任务和异步任务处理 一.项目环境 springboot2.x本身已经集成了定时任务模块和异步任务,可以直接使用 二.springboot常用定时任务配置 1.在启动类 ...

  4. 通过修改EIP寄存器实现强行跳转并且注入DLL到目标进程里

    /* 描述 功能:通过修改EIP寄存器实现32位程序的DLL注入(如果是64位,记得自己对应修改汇编代码部分) 原理: 挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器 ...

  5. androidstudio2.0引用.so文件

    1.将.so文件复制到libs目录下: 2.在build.gradle中添加下面的代码 sourceSets.main.jniLibs.srcDirs = ['libs'] 结果示例: (上面的1.2 ...

  6. Spring Boot集成sharding-jdbc实现分库分表

    一.水平分割 1.水平分库 1).概念:以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中.2).结果每个库的结构都一样:数据都不一样:所有库的并集是全量数据: 2.水平分表 1).概念以字段 ...

  7. 【TensorFlow】使用Object Detection API 训练自己的数据集报错

    错误1:  训练正常开始后,能正常看到日志输出,但中途报错 ResourceExhaustedError (see above for traceback): OOM when allocating ...

  8. Spring Boot & Cloud 轻量替代框架 Solon 1.3.35 发布

    Solon 是一个微型的Java开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Micro service.WebSocket. ...

  9. MySQL|一文解决主库已有数据的主从复制

    主从复制配置方案和实际的场景有很多,在之前配置了主从库都是全新的配置方案 在这一篇会配置主库存在数据,然后配置主从复制 开始之前,先分享一套MySQL教程,小白入门或者学习巩固都可以看 MySQL基础 ...

  10. 阿里面试官用HashMap把我问倒了

    本人是一名大三学生,最近在找暑期实习,其中也面试过两次阿里,一次菜鸟网络部门.一次网商银行部门,当然我都失败了,同时也让我印象很深刻,因此记录了其中一些面试心得,我觉得这个问题很值得分享,因此分享给大 ...