• springboot打包上线


    发布到线上的包结构

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

    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
    
    原创:做时间的朋友
  • 相关阅读:
    某图片网站整合yolo图片特征相似图片获取
    MySQL导入数据报错 ERROR 1794 (HY000) at line 22 -- 解决
    apache-commons-lang3之StringUtils使用集锦
    swf格式的flash文件变更md5
    Linux常见场景的shell使用
    tp5在apache下能访问,但放到nginx下报404
    template-web.js 使用二
    jquery实现动态添加html代码
    JQuery的父、子、兄弟节点
    this
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/14524084.html
Copyright © 2020-2023  润新知