java spring boot项目部署-上
1.编写sh脚本,便于服务器上管理工程:
#!/bin/bash source /etc/profile
PROG_NAME=$
ACTION=$ usage() {
echo "Usage: $PROG_NAME {start|stop|restart|status|tailf}"
exit ;
} # 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 $)/..; 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
} function start() {
check_pid
running=$?
if [ $running -gt ];then
echoGreen "$app now is running already, pid=`cat $pidfile`"
return
fi nohup java -jar $JAVA_OPTS $app >> ${logfile} >& & pid=$! echoGreen "$app starting "
for e in $(seq ); do
echo -n " $e"
sleep
done
echo $pid > $pidfile
check_pid
running=$?
if [ $running -gt ];then
echoGreen " ,pid=`cat $pidfile`"
return
else
echoRed ",started fail!!!"
fi
} function stop() {
pid=`cat $pidfile`
kill - $pid
echoRed "$app stoped..."
} function restart() {
stop
sleep
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 ];then
echoGreen "$app now is running, pid=`cat $pidfile`"
else
echoYellow "$app is stoped"
fi
} function main {
RETVAL=
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
tailf)
tailf
;;
status)
status
;;
backup)
backup
;;
rollback)
rollback
;;
*)
usage
;;
esac
exit $RETVAL
} main $
文件中包含多个站位符,可以借助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的话会很方便~
java spring boot项目部署-上的更多相关文章
- 多个Spring Boot项目部署在一个Tomcat容器无法启动
转自https://www.cnblogs.com/tomxin7/p/9434085.html 业务介绍 最近用Spring Boot开发了一个翻译的小项目,但是服务器上还跑着其他项目,包括一个同样 ...
- 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行
实操:将一个spring boot项目部署到docker容器里运行 实验需要的环境: 腾讯云+Ubuntu 16.04 x64+idea+插件docker integration+daocloud 第 ...
- KubeSphere CI/CD+GitLab+Harbor将Spring Boot项目部署至Kubernetes
上一篇文章分享了如何在 KubeSphere 对公共的代码仓库 GitHub 和镜像仓库 DockerHub 创建流水线,本文将继续使用 KubeSphere,基于 Harbor 和 GitLab 创 ...
- 简化 Spring Boot 项目部署,Flyway 搞起来
虽然我之前录了一个微人事(https://github.com/lenve/vhr)部署视频(新版微人事部署教程来啦),但是由于这次升级涉及到了 Redis 和 RabbitMQ,所以在本地跑微人事还 ...
- Spring Boot项目部署到外部Tomcat服务器
2017年04月27日 23:33:52 阅读数:7542 前言 Spring Boot项目一般都是内嵌tomcat或者jetty服务器运行,很少用war包部署到外部的服务容器,即使放到linux中, ...
- 将spring boot项目部署到tomcat容器中
一. 我这里用的环境 tomcat: tomcat 8 jdk: jdk 7 spring boot 版本: 1.5 二. 将创建好的spring boot项目做如下修改 2.1. 修改打包形式 在p ...
- Spring boot 项目部署服务器
Spring Boot 有两种部署到服务器的方式,这里介绍官方推荐的(jar包) 一.首先进行application.properties配置 # EMBEDDED SERVER CONFIGURAT ...
- spring boot 项目部署在阿里云上
装jdk, 然后 nohup java -jar xxxx.jar> system.log 2>&1 & lsof -i:9999 kill -9 1234
- Spring Boot 项目部署到本地Tomcat,出现访问路径问题
首先确定war 包没问题,把war包放在webapps目录下,访问http://localhost:8080/ + 项目名称 发现首页可以访问但css,js请求都是404,跳转页面也是404 解决方法 ...
随机推荐
- GADL针对矢量数据格式转换的实用工具 —— ogr2ogr
最初,因为可爱的学弟请教如何将ESRI Shapefile文件导入Google Earth接触到了Ogr2Ogr.粗略了解之后发现,这小东西功能强大. 谷歌地球支持矢量数据的展示,前提是数据符合KML ...
- Add map surrounds using the SymbologyControl
/ Copyright 2010 ESRI// // All rights reserved under the copyright laws of the United States// and a ...
- python学习笔记之——range()函数
range函数的三种用法:>>> range(1,5) # 代表从1到5(不包含5) [1, 2, 3, 4] >>> range(1,5,2) # 代表从1到5, ...
- 切换Fragment时实现数据保持
摘要 Fragment设计初衷是为了简化不同屏幕分辨率的开发难度,他将代表一个功能的UI及其相关数据看做一个模块,以便达到复用.可以将Fragment看作是一个可以嵌入布局中的activity,有自己 ...
- maven 骨架命令行创建
项目的骨架maven 约定在项目的根目录下放置pom.xml,在src/main/java目录下放置主代码,在src/test/java下放置项目的测试代码. 这些基本的目录结构和pom.xml文件的 ...
- 实现自定义Session
1. 回话状态接口 /// <summary> /// 会话状态策略接口 /// </summary> public partial interface ISessionStr ...
- 在线制作GIF图片项目愿景与范围
在线制作GIF图片项目愿景与范围 a. 业务需求 a.1 背景 在当今社会中,随着聊天软件和web网站的普及,原创动画制作越来越吸引人们的眼球,一个好的动态图片,可能就会为你的网站或本人赢得更多人的认 ...
- 二、ionic如何使用外链
1.ionic如何使用外链并返回原有页面? html如下: 对应的controller如下: (function() { angular.module('app').controller('extra ...
- C#判断奇偶数的函数
// 现代流行的"程序员"public static bool IsOdd(int n) { while (true) { switch (n) ...
- leetcode 之 Degree of an Array
1.题目描述 Given a non-empty array of non-negative integers nums, the degree of this array is defined as ...