Dubbo框架jar部署总结

1.关于DUBBO 服务提供端几种部署方式:

    1)tomcat 将服务端跑在tomcat,这种方式比较吃资源浪费端口;
    2)用DUBBO 提供的com.alibaba.dubbo.container.Main 方法,将工程打成jar包运行,相对来说这种方式不需要那么                  多tomcat 也就不需要那么多端口号(官方推荐用这种方式可以实现优雅停机);
     

2.工程配置的修改的总结和遇到的问题  :

  2.1:eclipse 中使用main函数启动

    1)移动配置文件和删除web.xml( 如果 不跑tomcat不需要这个文件) 
      
        移动完的文件如下图( 用java代码去加载root-context.xml 这个文件把其他xml加载进来):
      
           Dubbo框架jar部署总结_第1张图片
       root-context.xml中加载另外的2个xml配置文件如下:
       
       
       
       
         添加一个启动类代码如下( 这个类必须和Maven配置的指定入口的类一致 ):
package com.iqcloud.dubbo.main;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class StartService {

	@SuppressWarnings("resource")
	public static void main(String[] args) {
		System.out.println("-----------------------------初始化log4j变量");
		String log4jBasePath = System.getProperty("user.dir");
		System.out.println("工程同一级目录--------------------" + log4jBasePath);
		System.setProperty("catalina.base", log4jBasePath);
		System.out.println("-----------------------------log4j变量加载完成");
		System.out.println("-----------------------------开始加载配置文件");
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:root-context.xml");
		context.start();
		System.out.println("-----------------------------配置文件加载完毕");
		System.out.println("-----------------------------开始启动服务");
		com.alibaba.dubbo.container.Main.main(args);
	}
}

如果想在服务启动后执行某个方法就在main函数中的context.start()后面加如下代码:
           InitServlet initServlet = context.getBean("com.iqcloud.auth.service.InitServlet", InitServlet.class);
		System.out.println("----------------------------获取到对象initServlet" + initServlet);
      Initservlet 这个要执行的类要加上注解让他成为bean例子如下:

Dubbo框架jar部署总结_第2张图片


点击右键启动 出现如下说明启动成功:
Dubbo框架jar部署总结_第3张图片
运行时出现如下问题:
1:第一个问题如下图:
Dubbo框架jar部署总结_第4张图片
原因:xml中有中文的注释;

解决方法:
1)第一种:将所有的xml的编码方式都修改成GBK(包括mybatis下的xml) 如下
Dubbo框架jar部署总结_第5张图片
2)第二种:去掉所有中文注释

2.2使用Maven 打jar包进行运行:

 
       1)Maven配置如下:
        Dubbo框架jar部署总结_第6张图片
                 

         dubbo-provider  


        
            
            
                ${project.build.directory}/classes
                src/main/resources
                true
                
                    
                    **/*.xml
                    **/*.properties
                
            
            
            
                ${project.build.directory}/classes/META-INF/spring
                src/main/resources/spring
                true
                
                
                    spring-application.xml  
                
            
        


        
            
                
                
                    org.eclipse.m2e
                    lifecycle-mapping
                    1.0.0
                    
                        
                            
                                
                                    
                                        org.apache.maven.plugins
                                        maven-dependency-plugin
                                        [2.0,)
                                        
                                            copy-dependencies
                                        
                                    
                                    
                                        
                                    
                                
                            
                        
                    
                
            
        
        
            
            
            
                org.apache.maven.plugins
                maven-jar-plugin
                
                    
                    target/classes/
                    
                        
                            
                            
                            com.ruida.provice.facadeImpl.BannerProvider
                            
                            false
                            true
                            
                            lib/
                        
                        
                        
                            lib/zkclient-0.1.0.jar lib/zookeeper-3.4.5.jar
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        copy-dependencies
                        package
                        
                            copy-dependencies
                        
                        
                            jar
                            jar
                            false
                            
                            
                                ${project.build.directory}/lib
                            
                        
                    
                
            
        
    

 


2)上面配置完之后选中pom.xml文件右键点击run as -> maven install 进行jar包生成 如下图:
   Dubbo框架jar部署总结_第7张图片
运行完之后会在target下面出现部署所要的依赖包和jar文件如下图:
Dubbo框架jar部署总结_第8张图片
将lib包和工程的jar文件拷贝到同一个文件夹如下:
Dubbo框架jar部署总结_第9张图片
windows 运行 jar文件指令如下:
java -Xms128m -Xmx512m -jar /完整路径/xxx1.jar 
运行成功如下图:
Dubbo框架jar部署总结_第10张图片
Linux shell脚本运行如下:--转载 http://blog.csdn.net/minebk/article/details/72901490
#启动方法
start(){
    java -Xms128m -Xmx512m -jar /完整路径/xxx1.jar  > /日志完整路径/xxx1.log &
    java -Xms128m -Xmx512m -jar /完整路径/xxx2.jar  > /日志完整路径/xxx2.log &
    java -Xms128m -Xmx512m -jar /完整路径/xxx3.jar  > /日志完整路径/xxx3.log &
    java -Xms128m -Xmx512m -jar /完整路径/xxx4.jar  > /日志完整路径/xxx4.log &
}
#停止方法
stop(){
    ps -ef | grep -w zmshop-service | grep -v "grep" | awk '{print $2}'|while read pid
    do
        #需要判断pid是否为空
        if [ "$pid" != "" ]; then
            kill -9 $pid
        fi
    done
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        start
    ;;
    *)
        printf 'Usage: %s {start|stop|restart}\n' "$prog"
        exit 1
    ;;
esac

这边我在打成jar包时候出现了如下问题:
1:本地jar无法生成到lib 文件夹下;
解决方法: 本地jar包配置成用Maven引入代码如下
 
          
           zkclient-0.1.0  
           zkclient  
           0.1.0  
           system  
           ${project.basedir}/webapp/WEB-INF/lib/zkclient-0.1.0.jar  
        
     

2.上面配置生成完之后虽然有jar文件了,但是运行时候还是提示找不到对应的jar包,
后面发现在生成的jar包工程的MANIFEST.MF中的main-class中没有对应的jar 如下图:
Dubbo框架jar部署总结_第11张图片
Dubbo框架jar部署总结_第12张图片

  解决方法:
Maven添加如下配置:
 
                        
                          
                            lib/activemq-all-5.11.1.jar lib/antlr-2.7.4.jar lib/aspectjweaver.jar 
                            lib/chardet-1.0.jar lib/commons-cli-1.1.jar lib/commons-io-2.4.jar 
                            lib/commons-pool-1.6.jar lib/cpdetector_1.0.8.jar lib/dom4j-1.6.1.jar 
                            lib/facade.jar lib/freemarker.jar lib/gson-2.2.4.jar lib/IQBasicData.jar 
                            lib/iText-2.1.7.jar lib/iText-rtf-2.1.7.jar lib/iTextAsian.jar 
                            lib/jodconverter-core-3.0-beta-4-javadoc.jar lib/jodconverter-core-3.0-beta-4.jar 
                            lib/json-20090211.jar lib/juh-3.2.1.jar lib/jurt-3.2.1.jar lib/mail.jar 
                            lib/mysql-connector-java-5.1.25-bin.jar lib/onlineTopic.jar lib/patchca-0.5.0.jar 
                            lib/pdf-renderer-1.0.5.jar lib/QRCode.jar lib/ridl-3.2.1.jar lib/unoil-3.0.1.jar 
                            lib/zkclient-0.1.0.jar lib/zookeeper-3.4.5.jar lib/zxing.jar
                          
                        
Dubbo框架jar部署总结_第13张图片
       
      
2.配置完上面之后继续运行发现 通过Maven配置引进了的工程的jar包找不到:
解决方法:

先用Maven生成本工程引入的其他工程的jar包。
3.出现字符编码错误如下:
Dubbo框架jar部署总结_第14张图片
       解决方法:在maven中加上如下配置:
      
   
			  
                org.apache.maven.plugins  
                maven-compiler-plugin  
                3.1  
                  
                    1.5  
                    1.5  
                    UTF-8
                  
            
            
              
                org.apache.maven.plugins  
                maven-resources-plugin  
                2.6  
                  
                    UTF-8
                  
             


 2.3:给工程添加log4j

     xml代码如下:
     



     
    
        
        
            
            
        
        
        
            
            
            
            
            
            
        
    
    
    
    
        
        
        
        
        
        
        
        
            
        
    
    
    

    
    
    
    
   
    
    
	
    
	
        
		
        
        
        
	
    
    
    
        
           
        
        
        
        
    




catalina.base这个路径变量如果工程跑在tomcat 就是和tomcat 存放日志一样的路径如果是jar 部署就是通过main函数的  
String log4jBasePath = System.getProperty("user.dir");  System.setProperty("catalina.base", log4jBasePath); 
进行赋值System.getProperty("user.dir"); 获取到的路径是当前jar包存放路径的绝对地址
然后在root-context.xml 文件中import log4j.xml 文件如下:


2.4:linux上运行出现的问题

    1:The string "--" is not permitted within comments  xml文件注释出现问题了;
         解决方法:1)将项目的字符编码,改为utf-8就可以正确解析 但是改成这样之后 main本地测试main函数启动会报编码错       误(除非xml里面没有中文注释),用这种方法的话本地就要以原先的tomcat启动 部署的时候用jar包,或者把所有中文注释都去掉本地才能跑main函数;
                          2)第二种方案是把jdk升级成1.8 但是现在很多软件依赖于jdk1.7 所以解决方法是在linux 上装2个jdk
       
  目前把工程修改成jar 和 war 2种都支持的部署方式,本地调试还是用tomcat 启动

                
   


你可能感兴趣的:(DUBBO框架)