1.使用Servlet 容器運行 ---不可取
缺點:增長複雜性 浪費資源
緣由:
tomcat 運行須要端口, 一個tomcat 跑多個服務,也須要配置端口,是一個問題, 增長管理的複雜性, 自己要多Servlet容器進行配置, 內存溢出之類的
浪費資源:什麼程序不部署,單啓動tomcat 就要消耗內存
實現:
作成一個web工程 ,web.xml ,啓動以後會在zk上註冊服務
2. 自建main 方法來運行(Spring 容器)-- 不建議 (本地調試可用)
缺點: Dubbo 自己提供的高級性能沒用上, 本身編寫的啓動類可能會有缺陷
緣由: 本身寫一個main 方法類,進行啓動,本地開發,很方便, 可是不推薦生產使用,本地調試能夠用, dubbo不少高級特性沒用上。
3. 使用Dubb框架提供的main 方法來運行 (spring容器)--建議使用
優勢:框架自己提供 com.alibaba.dubbo.container.Main
可實現優雅關機(ShutDownHook)
優雅關機, linux 命令 kill -9命令會強制殺掉, 不少業務運行,如今申請關機, 業務邏輯還沒執行完, 可是強制殺掉,會致使業務邏輯尚未處理完, 優雅關機,先不接受請求,檢查線程是否運行,等待線程執行完,再進行關閉,能夠實現不會當即關機, 詳情查看官方文檔
如何使用Maven進行構建dubbo服務可執行jar包:
首選:
是pom.xml 中build標籤java
<buiild>
</build>linux
<groupId>cpcn.payment</groupId> <artifactId>Paymet</artifactId> <packaging>jar</packaging> <version>1.0.0.01-SNAPSHOT</version> <name>Payment</name>
主要看一下build裏面的配置:web
Spring Container
自動加載META-INF/spring目錄下的全部Spring配置。
配置:(配在java命令-D參數或者dubbo.properties中)
dubbo.spring.config=classpath*:META-INF/spring/*.xml ----配置spring配置加載位置spring
<!--MAVEN打包duboo可執行jar begin --> <build> <finalName>edu-service-user</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> <!-- 結合com.alibaba.dubbo.container.Main --> <resource> <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath> <directory>src/main/resources/spring</directory> <filtering>true</filtering> <includes> <include>spring-context.xml</include> </includes> </resource> </resources> <pluginManagement> <plugins> <!-- 解決Maven插件在Eclipse內執行了一系列的生命週期引發衝突 --> <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> <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> <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> <!--MAVEN打包duboo可執行jar end -->
默認加載META-INF/springapache
須要將配置文件拷貝到指定目錄下,tomcat
具體能夠參考博客: 打包插件的使用app