java spring boot项目部署-上

1.编写sh脚本,便于服务器上管理工程:

#!/bin/bash

source /etc/profile
PROG_NAME=$0
ACTION=$1

usage() {
    echo "Usage: $PROG_NAME {start|stop|restart|status|tailf}"
    exit 1;
}

# colors
red=‘\e[0;31m‘
green=‘\e[0;32m‘
yellow=‘\e[0;33m‘
reset=‘\e[0m‘

echoRed() { echo -e "${red}$1${reset}"; }
echoGreen() { echo -e "${green}$1${reset}"; }
echoYellow() { echo -e "${yellow}$1${reset}"; }

APP_HOME=$(cd $(dirname $0)/..; pwd)
app=${project.build.finalName}.${project.packaging}
cd $APP_HOME
mkdir -p logs

pidfile=logs/app.pid
logfile=logs/start.`date +%F`.log
JAVA_OPTS="${java_opts}"

bakdir=/data/ops/packages/app_bak/${project.build.finalName}
bakfile=$bakdir/${project.build.finalName}`date +%F`.${project.packaging}

function check_pid() {
    if [ -f $pidfile ];then
        pid=`cat $pidfile`
        if [ -n $pid ]; then
            running=`ps -p $pid|grep -v "PID TTY" |wc -l`
            return $running
        fi
    fi
    return 0
}

function start() {
    check_pid
    running=$?
    if [ $running -gt 0 ];then
        echoGreen "$app now is running already, pid=`cat $pidfile`"
        return 1
    fi

        nohup java -jar $JAVA_OPTS $app >> ${logfile} 2>&1 & pid=$!

    echoGreen "$app starting "
    for e in $(seq 10); do
        echo -n " $e"
        sleep 1
    done
    echo $pid > $pidfile
    check_pid
    running=$?
    if [ $running -gt 0 ];then
        echoGreen " ,pid=`cat $pidfile`"
        return 1
    else
        echoRed ",started fail!!!"
    fi
}

function stop() {
    pid=`cat $pidfile`
    kill -9 $pid
    echoRed "$app stoped..."
}

function restart() {
    stop
    sleep 1
    start
}

function backup(){

  if [ ! -x $bakdir ];then
    mkdir -p $bakdir

  fi

  if [ ! -f $bakfile ];then
        cp $app $bakfile
        echo $bakfile backup finish
  else
        echo $bakfile is already backup

  fi
}

function rollback(){

  if [ ! -f $bakfile ];then
        echo $bakfile backup not found
  else
        rm -f $app
        cp $bakfile $app
        echo $app rollback finish

  fi

}

function tailf() {
        tail -f $APP_HOME/$logfile
}

function status() {
    check_pid
    running=$?
    if [ $running -gt 0 ];then
        echoGreen "$app now is running, pid=`cat $pidfile`"
    else
        echoYellow "$app is stoped"
    fi
}

function main {
   RETVAL=0
   case "$1" in
      start)
         start
         ;;
      stop)
         stop
         ;;
      restart)
         restart
         ;;
      tailf)
         tailf
         ;;
      status)
         status
         ;;
      backup)
         backup
         ;;
      rollback)
         rollback
         ;;
      *)
         usage
         ;;
      esac
   exit $RETVAL
}

main $1

文件中包含多个站位符,可以借助spring filter打包时进行填充,如将sh起名为app.sh放置于maven格式项目的src/main/bin目录下则在pom文件中可添加如下配置,如:

    <profiles>
        <!--开发默认环境-->
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <profileActive>dev</profileActive>
                <java_opts>-server -Xms512m -Xmx512m -XX:NewSize=128m -XX:MaxNewSize=128m -Xss256k</java_opts>
                <bakcupdir>/data/ops/packages/app_bak</bakcupdir>
            </properties>
        </profile>
        <!--生产环境-->
        <profile>
            <id>product</id>
            <properties>
                <profileActive>product</profileActive>
                <java_opts>-server -Xms2048m -Xmx2048m -XX:NewSize=256m -XX:MaxNewSize=256m -Xss256k</java_opts>
                <bakcupdir>/data/ops/packages/app_bak</bakcupdir>
            </properties>
        </profile>

    </profiles>

    <build>
        <finalName>liam-service</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources/keys/*</directory>
                <includes>
                    <include>webank_keystore.jks</include>
                    <include>webank_truststore.jks</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <!--也就是此处配置上maven打包需要进行配置的文件-->
            <resource>
                <directory>src/main/bin</directory>
                <targetPath>${project.build.directory}/bin</targetPath>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.5.6.RELEASE</version>
                <configuration>
                    <!--fork:  如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart-->
                    <fork>true</fork>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <!-- 用于打包jar -->
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <configuration>
                        <encoding>utf-8</encoding>
                        <useDefaultDelimiters>true</useDefaultDelimiters>
                        <nonFilteredFileExtensions>
                            <!--防止maven该表证书内的内容-->
                            <nonFilteredFileExtension>p12</nonFilteredFileExtension>
                            <nonFilteredFileExtension>jks</nonFilteredFileExtension>
                        </nonFilteredFileExtensions>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

如此将包打好后扔于服务器上,就很方便了:

ssh "chmod +x /data/ops/app/liam-service/bin/app.sh"
ssh "/data/ops/app/liam-service/bin/app.sh backup"
ssh "/data/ops/app/liam-service/bin/app.sh stop"
ssh "/data/ops/app/liam-service/bin/app.sh start"

当然借助jenkens的话会很方便~

原文地址:https://www.cnblogs.com/ylsforever/p/8405499.html

时间: 2024-10-03 06:18:42

java spring boot项目部署-上的相关文章

多个Spring Boot项目部署在一个Tomcat容器无法启动

Tomxin7 Simple, Interesting | 简单,有趣 本文将花费您五分钟时间 业务介绍 最近用Spring Boot开发了一个翻译的小项目,但是服务器上还跑着其他项目,包括一个同样用Spring Boot开发的微信后端服务,本次业务需要在阿里云的Linux使用同一个Tomcat容器部署多个项目. 部署环境:JDK8.Tomcat8.Centos7 遇到的问题 我多个项目一直都是部署在同一个Tomcat下,共用80端口,之前使用的MVC或者Servlet项目都没有问题,但是今天把

Spring Boot项目部署到 IBM WebSphere 8.5.5需要注意的地方

遇到问题 对Spring Boot观察了好久,最近终于开始有机会使用Spring Boot来做项目的开发,Spring Boot不需要部署,用jar包模式运行的机制,非常适合做快速开发,能在项目演示和迭代期间起到快速的推进作用.整体来说是一个非常好快速开发框架. 今天着重要说一下的是Spring Boot项目打包成war包,部署到J2EE容器,特别是Websphere遇到的问题. 首先Spring Boot项目build的war包,在Tomcat 7,8,Jetty等容器下,不论是嵌入到ecli

spring boot 项目部署在Docker中调用redis出现的奇怪问题

Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Wed Dec 14 09:43:13 UTC 2016 There was an unexpected error (type=Internal Server Error, status=500). Error creating bean with name 'enabl

基于maven的spring boot项目 部署到tomcat出现js文件失效处理思路总结

不久前遇到了这样一个问题:在eclipse上运行的很好的项目,在部署到tomcat上后js就不能正常运行了. 在网上找了很多文章,都没有很好的解决这个问题,最终只能一步步来排查. 确人部署环境的问题还是tomcat导致的问题:在本机上用tomcat的方式部署,启动,发现js任然无效-->确定是tomcat导致的问题. 通过浏览器查看页面源代码发现所有的js文件都正常导入,同时查看class/static,下面的所有资源都存在. 删除所有js,写入alert(1),能够真确显示.在每条js导入语句

【Spring Boot】Spring Boot项目部署到外部Tomcat容器

一.修改项目打包方式为war包 修改pom.xml文件中packaging属性项 <packaging>war</packaging> 修改pom.xml文件增加一个依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provi

spring boot tomcat 部署

前几天springboot项目部署到linux中,整个过程就是个坑啊.踩坑的过程中也学到了许多.spring boot 项目部署时由于其内置了tomcat和jdk,而且还都是8. 所以部署的话就分为两种部署了, 第一种就是使用其内置的tomcat部署, 第二种就是采用外部的tomcat部署.采用内部的tomcat部署又分为两种: 第一种是打包成war包部署,第二种事打包成jar包部署. 两者区别就在于打包成jar包的是无静态资源的,如jsp,HTML等,像只是提供restful接口. 阅读此篇博

docker部署spring boot项目在服务器上

IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得有一个spring boot的项目[集成了jpa+mybatis的spring boot 例子:https://github.com/AngelSXD/swapping] 第二步:项目打包为jar包 install成功以后 找到项目根目录下的target目录,这里面的jar就是打包好可以部署的jar

spring boot项目如何测试,如何部署

有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发.调试.打包到最后的投产上线. 开发阶段 单元测试 在开发阶段的时候最重要的是单元测试了,springboot对单元测试的支持已经很完善了. 1.在pom包中添加spring-boot-starter-test包引用 <dependency> <groupId>org.springframework.boot</groupI

Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目

在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集群中去.这个才是我们最终的目标.众所周知,k8s 是目前最火的容器编排项目,很多公司都使用它来构建和管理自己容器集群,可以用来做机器学习训练以及 DevOps 等一系列的事情. 在这里,我们聚焦 CI/CD,针对于 Spring Boot 项目,借助 Gitlab CI 完成流水线的任务配置,最终部