您的位置:首页 > 其它

使用Maven构建Dubbo服务的可运行jar包 支持优雅关机

2017-05-18 11:51 615 查看

1.Dubbo项目结构如图



2. pom文件配置

#注意:此处只展示打包所需的配置

<build>
<finalName>dubbo-user-service</finalName> <!--包名称 -->
<resources>
<resource>
<targetPath>${project.build.directory}/classes</targetPath>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes><!-- 配置文件信息 -->
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<targetPath>${project.build.directory}/classes/META-INF/spring</targetPath>
<directory>src/main/resources/spring</directory>
<filtering>true</filtering>
<includes><!--com.alibaba.dubbo.container.Main做为启动入口需要将spring配置文件拷贝到/classes/META-INF/spring目录下, -->
<include>*.xml</include>
</includes>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<versionRange>[2.0,)</versionRange>
<goals>
<goal>copy-dependencies</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>

4000
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<manifest>
<mainClass>com.alibaba.dubbo.container.Main</mainClass>
<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</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-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<useUniqueVersions>false</useUniqueVersions>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>


3.生成可执行jar文件

生成jar包,项目右键:Run As –> Maven install



拷贝jar包及lib运行库到服务器上: dubbo-user-service.jar && lib



4.创建可运行脚本并配置成服务

目录结构(目录及文件名最好统一,便于脚本维护)



创建shell脚本:vim dubbo-user-service.sh

#!/bin/sh
# chkconfig: 2345 20 80
## 配置jdk路径
export JAVA_HOME=/opt/jdk
export JRE_HOME=$JAVA_HOME/jre

## service name
APP_NAME=dubbo-user-service

SERVICE_DIR=/opt/$APP_NAME
SERVICE_NAME=$APP_NAME
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid

cd $SERVICE_DIR

case "$1" in

start)
nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;

stop)
kill `cat $SERVICE_DIR/$PID`
rm -rf $SERVICE_DIR/$PID
echo "=== stop $SERVICE_NAME"

sleep 5
##
## edu-service-aa.jar
## edu-service-aa-bb.jar
P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "=== $SERVICE_NAME process not exists or stop success"
else
echo "=== $SERVICE_NAME process pid is:$P_ID"
echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
kill -9 $P_ID
fi
;;

restart)
$0 stop
sleep 2
$0 start
echo "=== restart $SERVICE_NAME"
;;

*)
## restart
$0 stop
sleep 2
$0 start
;;

esac
exit 0


软链到init.d目录下

# cd /etc/init.d/

# ln -s /opt/dubbo-user-service/dubbo-user-service.sh /etc/init.d/dubbo-user-service


设置执行权限

# chmod a+x ./dubbo-user-service


注册成服务

# chkconfig --add dubbo-user-service
# chkconfig --list #可查看配置的服务


设置开机启动

# chkconfig dubbo-user-service on


启动

# service dubbo-user-service start


停止

# service dubbo-user-service stop


重启

# service dubbo-user-service restart
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息