springboot工程打包与部署(Linux下)

本文介绍springboot工程在Linux下,打包、部署、日志配置、shell脚本自启动等一系列操作。

 

1、springboot工程打包

 使用springboot自带的Run/Debug Configurations:

新建一个Maven Configuration:

  把以下命令copy到Run中:

clean package spring-boot:repackage -Dmaven.test.skip=true

 执行配置好的打包命令:

 target下即为打好的jar包:

 如果打包有问题,可参考以下文件:

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <packaging>jar</packaging>
    <groupId>com.tx</groupId>
    <artifactId>lwy-new</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>lwy-new</name>
    <description>lwy-new</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.hive.jdbc</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>2.2.0-TBDS-5.2.0.1</version>
            <type>jar</type>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/hive-jdbc-2.2.0-TBDS-5.2.0.1.jar</systemPath>
        </dependency>

        <dependency>
            <groupId>org.apache.hive.service</groupId>
            <artifactId>hive-service-rpc</artifactId>
            <version>2.2.0-TBDS-5.2.0.1</version>
            <type>jar</type>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/hive-service-rpc-2.2.0-TBDS-5.2.0.1.jar</systemPath>
        </dependency>

        <dependency>
            <groupId>org.apache.hive.common</groupId>
            <artifactId>hive-common</artifactId>
            <version>2.2.0-TBDS-5.2.0.1</version>
            <type>jar</type>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/hive-common-2.2.0-TBDS-5.2.0.1.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.apache.hive.serde</groupId>
            <artifactId>hive-serde</artifactId>
            <version>2.2.0-TBDS-5.2.0.1</version>
            <type>jar</type>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/hive-serde-2.2.0-TBDS-5.2.0.1.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.apache.hive.service</groupId>
            <artifactId>hive-service</artifactId>
            <version>2.2.0-TBDS-5.2.0.1</version>
            <type>jar</type>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/hive-service-2.2.0-TBDS-5.2.0.1.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.2-TBDS-5.2.0.1</version>
            <type>jar</type>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/hadoop-common-2.7.2-TBDS-5.2.0.1.jar</systemPath>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.14</version>
        </dependency>

        <dependency>
            <groupId>org.apache.thrift</groupId>
            <artifactId>libthrift</artifactId>
            <version>0.17.0</version>
            <type>jar</type>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.0-android</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.4.2.RELEASE</version>
                <configuration>
                    <mainClass>com.tx.lwynew.LwyNewApplication</mainClass>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>src/main/webapp</directory>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource>
                <directory>src/main/java</directory>
            </resource>
            <resource>
                <directory>lib</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
        </resources>
    </build>

</project>
View Code

特殊情况:本地jar的打包

本工程引入了本地jar包,这种情况打包具体操作如下:

1、修改 spring-boot-starter-parent的版本为:2.7.5 (4.0.0版本的打包将会失败)

 引用的本地jar:

 2、日志配置

 在工程的resources路径下,添加 logback.xml.

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">

    <contextName>lwy-new</contextName>

    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr"
                    converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

    <!-- 控制台彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%black(%contextName-) ${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){red} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){cyan} %clr(%-40.40logger{39}){magenta} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!-- 日志文件输出 -->
    <property name="FILE_LOG_PATTERN"
              value="%black(%contextName-) ${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!-- 日志文件地址 -->
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-./logs}}"/>

    <!-- 日志文件前缀 -->
    <property name="LOG_PREFIX" value="lwy"/>

    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <appender name="INFO_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}/${LOG_PREFIX}-info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 是否在启动时清除存档日志文件 -->
            <cleanHistoryOnStart>${LOG_FILE_CLEAN_HISTORY_ON_START:-false}
            </cleanHistoryOnStart>
            <!-- 过渡日志文件名的模式 -->
            <fileNamePattern>
                ${ROLLING_FILE_NAME_PATTERN:-${LOG_FILE}/${LOG_PREFIX}-info-%d{yyyyMMdd}.log.%i.gz}
            </fileNamePattern>
            <!-- 单个日志文件最多 100MB, 30天的日志周期,最大不能超过20GB  -->
            <maxFileSize>${LOG_FILE_MAX_SIZE:-100MB}</maxFileSize>
            <maxHistory>${LOG_FILE_MAX_HISTORY:-30}</maxHistory>
            <totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-20GB}</totalSizeCap>
        </rollingPolicy>
    </appender>

    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>

        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}/${LOG_PREFIX}-error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 是否在启动时清除存档日志文件 -->
            <cleanHistoryOnStart>${LOG_FILE_CLEAN_HISTORY_ON_START:-false}
            </cleanHistoryOnStart>
            <!-- 过渡日志文件名的模式 -->
            <fileNamePattern>
                ${ROLLING_FILE_NAME_PATTERN:-${LOG_FILE}/${LOG_PREFIX}-error-%d{yyyyMMdd}.log.%i.gz}
            </fileNamePattern>
            <!-- 单个日志文件最多 100MB, 30天的日志周期,最大不能超过20GB  -->
            <maxFileSize>${LOG_FILE_MAX_SIZE:-100MB}</maxFileSize>
            <maxHistory>${LOG_FILE_MAX_HISTORY:-30}</maxHistory>
            <totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-20GB}</totalSizeCap>
        </rollingPolicy>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="INFO_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>


    <logger name="net.sf.ehcache" level="INFO"/>


    <!-- 减少部分debug日志 -->
    <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
    <logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
    <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
    <logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
    <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
    <logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
    <logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>

    <!-- 业务日志 -->
    <Logger name="com.tx" level="INFO"/>


</configuration>
View Code

在配置文件application.yaml添加如下配置:

logging:
  level:
    com.tx.*: debug

服务器上日志文件存储的情况:

3、部署

 本程序部署在Linux上,需要在Linux创建文件夹,如下图:

 

将打好的jar包和启动jar的shell脚本copy到上一步新建的路径下:

 

 执行以下命令部署jar:

sh start.sh

实时查看log日志信息,执行以下命令:

tail -f /xxx/xxx/xx.log

查询日志效果如下:

4、shell脚本

编写shell脚本一键启动应用:

#!/bin/sh

#export JAVA_HOME=/usr/java/jdk1.8
#export PATH=$JAVA_HOME/bin:$PATH


APP_NAME=/usr/lwy/lwy-new-0.0.1-SNAPSHOT.jar
LOG_FILE=/usr/lwy/logs/lwy-info.log

#pid=`ps -ef | grep "java -jar opc-0.0.1-SNAPSHOT.jar" | grep -v grep | awk '{print $2}'`
# 查找已经启动的jar的进程id
pid=`jps |grep  lwy-new-0.0.1-SNAPSHOT.jar |awk '{print $1}'`

# 杀死进程
echo "进程pid是 $pid" $pid
kill -9 $pid
echo "$pid进程终止成功"

#判断jar包文件是否存在,如果存在启动jar包,并实时查看日志
if test -e $APP_NAME
then
    echo '开始启动程序......'
    
    #启动jar包
    nohup java -jar $APP_NAME --server.port=8889 1>/dev/null 2>&1 &

    #实时查看日志
        #tail -f $LOG_FILE
else
    echo "程序启动失败,$APP_NAME不存在"
fi
View Code

shell脚本自启动:待续

 

5、实时查看日志

在Linux中执行以下命令:

tail -f /usr/lwy/xxxx/lwy-info.log

 

posted @ 2023-01-01 22:15  Caesar_the_great  阅读(471)  评论(0编辑  收藏  举报