springboot创建linux系统下启动服务
springboot 帮我解决了不少配置性的问题。但是同时候也带来了⼀些部署上的问题。我相信,⼀个真正的线上项⽬,绝不可能是java -jar xx.jar 去直接启动,对应不同操作系统有不同的服务在才,能主动启动与停⽌。能随机启动,这是基本的要求,当然平时可能都是运维⼤哥帮我们写了⼀些脚本完成这项⽬任务,今天我想⾃⼰动⼿写写,项⽬中⾃带了脚本,能为部署省去不少⿇烦,话不多说,上代码。
第⼀步
我们先建⽴⼀⼈简单的spring项⽬,简单写了⼀个hello请求,并返回hello+传进来的参数,
第⼆步
我们对项⽬做⼀些配置。⽐如要把外部配置⽂件从jar 包分离出来,⽅便配置修改,把第三jar 打进lib包,然后再把这些压缩成  这⾥不赘述,直接上贴配置
<build>
<finalName>${finalname}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>**/cer/**</include>
<include>**/logback*.xml</include>
<include>**/*.yml</include>
<include>**/*.sh</include>
<include>**/readme</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
hello spring是什么意思</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-filtering</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>${mainclass}</mainClass>
</manifest>
<manifestEntries>
<Class-Path>./</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory> ${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<descriptors>
<descriptor>src/main/l</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
这样运⾏mvn clean compile package 我们就可以得到⼀个 初步完成了。第三步
这也是本篇⽂章的主要部分, 解压后如下
我们使⽤常规启动
java -jar demo.jar
可以看到项⽬已正常启动并可以访问了
但是这样控制台⼀关就没了,或者加上&  后台启动,但是要重启或是开机启动⼜⿇烦了。于是就写了以下脚本
demo_init.sh
#!/bin/sh
apppath=$(cd `dirname  $0`;pwd)
sed -i "s?apppath=.?apppath=$apppath?" ./${finalname}.sh
sed -i "s?JAVA_HOME=.?JAVA_HOME=$JAVA_HOME?" ./${finalname}.sh
sed -i "s?<property name=\"filepath\" value=\"./\"/>?<property name=\"filepath\" value=\"$apppath/\"/>?" ./l
cp ./${finalname}.sh /etc/init.d/${finalname}
systemctl enable  ${finalname}
service ${finalname} start
这段代码这⾥有必要解释⼀下
第⼀⾏固定写法不解释,第⼆⾏获取jar包所在⽬录,第三到第五⾏是对直正要⽣成的脚本做⼀些变量替换。还是⽇志⽂件的路径的替换。不理解的同学可以⾃⾏百度sed  ⽤法
后⾯三⾏替换后变理的脚本⽂件放到init.d ⽬录下
开启⾃启动,然后启动服务
demo.sh
#!/bin/sh
# chkconfig: 2345 10 90
# description: ${finalname}
JAVA_HOME=.
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
appname=${finalname}
apppath=./
. /etc/init.d/functions
case "$1" in
start)
echo $JAVA_HOME
$JAVA_HOME/bin/java  -Xms2048m -Xmx2048m -jar /home/soft/demo/demo.jar &
echo $! > /var/run/$appname.pid
;;
stop)
if [ ! -f /var/run/$appname.pid ]; then
echo "$appname: not running"
exit 1
fi
kill -TERM `cat /var/run/$appname.pid`
;;
reload)
if [ ! -f /var/run/$appname.pid ]; then
echo "$appname: not running"
exit 1
fi
;;
*)
echo "Usage: /etc/init.d/$appname {start|stop|reload}"
exit 1
;;
esac
exit 0
常规的脚本,主要注意标线两个地⽅
第四步
验证我们的脚本
执⾏init脚本
可以看服务启动OK了
我们查看⼀下服务
可以看到服务也启动了
再停⽌⼀下服务
可以看到服务成功停⽌了,并且是停⽌状态。我们重启⼀下机器,看是不是能能⾃动启动
可以看到服务也成功启动了,所有⼯作完成。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。