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

来源:互联网 发布:淘宝食品qs认证 编辑:程序博客网 时间:2024/06/14 07:18

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>                <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包

  • 拷贝jar包及lib运行库到服务器上: dubbo-user-service.jar && lib
    生成的可执行jar文件


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

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

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

#!/bin/sh# chkconfig: 2345 20 80## 配置jdk路径export JAVA_HOME=/opt/jdkexport JRE_HOME=$JAVA_HOME/jre## service nameAPP_NAME=dubbo-user-serviceSERVICE_DIR=/opt/$APP_NAMESERVICE_NAME=$APP_NAMEJAR_NAME=$SERVICE_NAME\.jarPID=$SERVICE_NAME\.pidcd $SERVICE_DIRcase "$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        ;;esacexit 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