Dubbo整合maven+spring+springmvc+mybatis之服务消费搭建

服务消费者ivan-dubbo-web工程搭建,首先这是一个web工程,这里只存在Controller及前台view


1、在WEB_INF下新建文件夹views,并将自动生成的index.jsp,拖到views文件夹下,如上图;

2、pom.xml文件,这里依赖暴露的接口ivan-api及ivan-core工程:

[html]  view plain  copy
 
 
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <span style="color:#FF9966;"><groupId>ivan</groupId>  
  5.     <artifactId>ivan-dubbo-web</artifactId></span>  
  6.     <packaging>war</packaging>  
  7.     <span style="color:#FF9966;"><version>0.0.1-SNAPSHOT</version>  
  8.     <name>ivan-dubbo-web Maven Webapp</name></span>  
  9.     <url>http://maven.apache.org</url>  
  10.     <properties>  
  11.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  12.     </properties>  
  13.   
  14.     <dependencies>  
  15.         <dependency>  
  16.             <groupId>junit</groupId>  
  17.             <artifactId>junit</artifactId>  
  18.             <version>4.12</version>  
  19.             <scope>test</scope>  
  20.         </dependency>  
  21.   
  22.         <dependency>  
  23.             <groupId>ivan</groupId>  
  24.             <artifactId>ivan-core</artifactId>  
  25.             <version>0.0.1-SNAPSHOT</version>  
  26.         </dependency>  
  27.   
  28.         <dependency>  
  29.             <groupId>ivan</groupId>  
  30.             <artifactId>ivan-api</artifactId>  
  31.             <version>0.0.1-SNAPSHOT</version>  
  32.         </dependency>  
  33.     </dependencies>  
  34.     <build>  
  35.         <finalName>ivan-dubbo-web</finalName>  
  36.     </build>  
  37. </project>  

3、web.xml,这里采用的web工程2.5版本,如果各位是2.3、3.0等,请百度修改xml文件:

[html]  view plain  copy
 
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="<span style="color:#FF0000;">2.5</span>"    
  3.     xmlns="http://java.sun.com/xml/ns/javaee"    
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
  6.     http://java.sun.com/xml/ns/javaee/web-app_<span style="color:#FF0000;">2_5</span>.xsd">   
  7.       
  8.     <display-name>ivan-dubbo-web</display-name>  
  9.   
  10.     <context-param>  
  11.         <param-name>contextConfigLocation</param-name>  
  12.         <param-value>classpath:spring.xml</param-value>  
  13.     </context-param>  
  14.   
  15.     <filter>  
  16.         <filter-name>encodingFilter</filter-name>  
  17.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  18.         <init-param>  
  19.             <param-name>encoding</param-name>  
  20.             <param-value>utf-8</param-value>  
  21.         </init-param>  
  22.         <init-param>  
  23.             <param-name>forceEncoding</param-name>  
  24.             <param-value>true</param-value>  
  25.         </init-param>  
  26.     </filter>  
  27.     <filter-mapping>  
  28.         <filter-name>encodingFilter</filter-name>  
  29.         <url-pattern>/*</url-pattern>  
  30.     </filter-mapping>  
  31.   
  32.   
  33.     <filter>  
  34.         <filter-name>hiddenHttpMethodFilter</filter-name>  
  35.         <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>  
  36.     </filter>  
  37.   
  38.     <filter-mapping>  
  39.         <filter-name>hiddenHttpMethodFilter</filter-name>  
  40.         <url-pattern>/*</url-pattern>  
  41.     </filter-mapping>  
  42.   
  43.     <listener>  
  44.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  45.     </listener>  
  46.   
  47.     <!-- 防止spring内存溢出监听器 -->  
  48.     <listener>  
  49.         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
  50.     </listener>  
  51.   
  52.     <!-- 配置静态文件访问 -->  
  53.     <servlet-mapping>  
  54.         <servlet-name>default</servlet-name>  
  55.         <url-pattern>*.jpg</url-pattern>  
  56.     </servlet-mapping>  
  57.     <servlet-mapping>  
  58.         <servlet-name>default</servlet-name>  
  59.         <url-pattern>*.png</url-pattern>  
  60.     </servlet-mapping>  
  61.     <servlet-mapping>  
  62.         <servlet-name>default</servlet-name>  
  63.         <url-pattern>*.gif</url-pattern>  
  64.     </servlet-mapping>  
  65.     <servlet-mapping>  
  66.         <servlet-name>default</servlet-name>  
  67.         <url-pattern>*.js</url-pattern>  
  68.     </servlet-mapping>  
  69.     <servlet-mapping>  
  70.         <servlet-name>default</servlet-name>  
  71.         <url-pattern>*.css</url-pattern>  
  72.     </servlet-mapping>  
  73.   
  74.   
  75.     <!-- <servlet> <servlet-name>upload</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
  76.         <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>upload</servlet-name>   
  77.         <url-pattern>/</url-pattern> </servlet-mapping> -->  
  78.   
  79.     <servlet>  
  80.         <description>ivan-dubbo-web servlet</description>  
  81.         <servlet-name>rest</servlet-name>  
  82.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  83.         <init-param>  
  84.             <param-name>contextConfigLocation</param-name>  
  85.             <param-value>  
  86.                 classpath:spring-mvc.xml  
  87.             </param-value>  
  88.         </init-param>  
  89.         <load-on-startup>1</load-on-startup>  
  90.     </servlet>  
  91.     <servlet-mapping>  
  92.         <servlet-name>rest</servlet-name>  
  93.         <url-pattern>/</url-pattern>  
  94.     </servlet-mapping>  
  95.   
  96.     <!-- 配置session超时时间,单位分钟 -->  
  97.     <session-config>  
  98.         <session-timeout>30</session-timeout>  
  99.     </session-config>  
  100.   
  101.     <welcome-file-list>  
  102.         <welcome-file>index.jsp</welcome-file>  
  103.     </welcome-file-list>  
  104. </web-app>  

4、spring.xml,主要阐述服务注册中心及服务暴露协议,这里为dubbo协议(这里引入的静态文件config.properties暂时没有用,可以注释掉):

[html]  view plain  copy
 
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans          
  6.     http://www.springframework.org/schema/beans/spring-beans.xsd          
  7.     http://code.alibabatech.com/schema/dubbo          
  8.     http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
  9.     http://www.springframework.org/schema/context  
  10.     http://www.springframework.org/schema/context/spring-context.xsd">  
  11.   
  12.     <!--引入配置属性文件 -->  
  13.     <context:property-placeholder location="classpath:config.properties" />  
  14.   
  15.     <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->  
  16.     <dubbo:application name="ivan-dubbo-web" />  
  17.   
  18.     <!-- 使用zookeeper广播注册中心暴露服务地址 -->  
  19.     <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />  
  20.       
  21. </beans>  

5、spring-mvc.xml,这个大家应该都比较熟悉了,就是前台解析及bean的自动扫描(启动upload的配置暂时无用):

[html]  view plain  copy
 
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans          
  6.     http://www.springframework.org/schema/beans/spring-beans.xsd          
  7.     http://code.alibabatech.com/schema/dubbo          
  8.     http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
  9.     http://www.springframework.org/schema/context  
  10.     http://www.springframework.org/schema/context/spring-context.xsd">  
  11.   
  12.     <!--   
  13.         自动扫描controller包下的所有类,如果@Controller注入为bean  
  14.         并将bean依赖注入,即dubbo服务端暴露的Service注入到Controller中  
  15.     -->  
  16.     <dubbo:annotation package="com" />  
  17.       
  18.     <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->  
  19.     <bean id="mappingJacksonHttpMessageConverter"  
  20.         class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
  21.         <property name="supportedMediaTypes">  
  22.             <list>  
  23.                 <value>text/html;charset=UTF-8</value>  
  24.             </list>  
  25.         </property>  
  26.     </bean>  
  27.   
  28.     <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->  
  29.     <bean  
  30.         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
  31.         <property name="messageConverters">  
  32.             <list>  
  33.                 <!-- json转换器 -->  
  34.                 <ref bean="mappingJacksonHttpMessageConverter" />  
  35.             </list>  
  36.         </property>  
  37.     </bean>  
  38.   
  39.     <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->  
  40.     <bean  
  41.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  42.         <property name="viewClass"  
  43.             value="org.springframework.web.servlet.view.JstlView" />  
  44.         <property name="prefix" value="/WEB-INF/views/" />  
  45.         <property name="suffix" value=".jsp" />  
  46.     </bean>  
  47.   
  48.     <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->  
  49.     <bean id="multipartResolver"  
  50.         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  51.         <property name="defaultEncoding" value="UTF-8" />  
  52.         <!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->  
  53.         <property name="maxUploadSize" value="200000" />  
  54.     </bean>  
  55.   
  56.     <!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException -->  
  57.     <!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 -->  
  58.     <bean id="exceptionResolver"  
  59.         class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
  60.         <property name="exceptionMappings">  
  61.             <props>  
  62.                 <!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 -->  
  63.                 <prop  
  64.                     key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>  
  65.             </props>  
  66.         </property>  
  67.     </bean>  
  68.   
  69. </beans>  

6、log4j.properties

[html]  view plain  copy
 
 
  1. ### set log levels ###  
  2. log4j.rootLogger = INFO , C , D , E   
  3.   
  4. ### console ###  
  5. log4j.appender.C = org.apache.log4j.ConsoleAppender  
  6. log4j.appender.C.Target = System.out  
  7. log4j.appender.C.layout = org.apache.log4j.PatternLayout  
  8. log4j.appender.C.layout.ConversionPattern = [%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n  
  9.   
  10. ### log file ###  
  11. log4j.appender.D = org.apache.log4j.DailyRollingFileAppender  
  12. log4j.appender.D.File =../logs/IvaDubboWeb-info.log  
  13. log4j.appender.D.Append = true  
  14. log4j.appender.D.Threshold = INFO   
  15. log4j.appender.D.layout = org.apache.log4j.PatternLayout  
  16. log4j.appender.D.layout.ConversionPattern = [%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n  
  17.   
  18. ### exception ###  
  19. log4j.appender.E = org.apache.log4j.DailyRollingFileAppender  
  20. log4j.appender.E.File = ../logs/IvaDubboWeb-error.log  
  21. log4j.appender.E.Append = true  
  22. log4j.appender.E.Threshold = ERROR   
  23. log4j.appender.E.layout = org.apache.log4j.PatternLayout  
  24. log4j.appender.E.layout.ConversionPattern = [%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n  

7、创建UserController,并将ivan-api工程中的UserService依赖注入(注意:@Reference中若有其他属性,需与服务端的@Service完全对应。如:@Service(version="1.0.0"),消费者必须为@Reference(version="1.0.0"),否则是找不到服务的):

[java]  view plain  copy
 
 
  1. import java.util.List;  
  2.   
  3. import org.slf4j.Logger;  
  4. import org.slf4j.LoggerFactory;  
  5. import org.springframework.stereotype.Controller;  
  6. import org.springframework.web.bind.annotation.RequestMapping;  
  7. import org.springframework.web.bind.annotation.ResponseBody;  
  8.   
  9. import com.alibaba.dubbo.config.annotation.Reference;  
  10. import com.ivan.api.dubbo.UserService;  
  11. import com.ivan.entity.User;  
  12.   
  13. @Controller  
  14. @RequestMapping("/user")  
  15. public class UserController {  
  16.       
  17.     @SuppressWarnings("unused")  
  18.     private static final Logger logger = LoggerFactory.getLogger(UserController.class);  
  19.       
  20.     @Reference  
  21.     private UserService userService;  
  22.       
  23.     @RequestMapping("/")  
  24.     public String goIndex(){  
  25.         return "index";  
  26.     }  
  27.       
  28.     @RequestMapping("/list")  
  29.     @ResponseBody  
  30.     public List<User> getUsers(){  
  31.         return userService.getUsers();  
  32.     }  
  33.       
  34.     @RequestMapping("/one")  
  35.     @ResponseBody  
  36.     public User getUserById(){  
  37.         return userService.getUserByPrimaryKey("1");  
  38.     }  
  39. }  

至此,消费者已经搭建完成了,将工程发布到tomcat中,并启动(前提服务提供者即ivan-dubbo-server及注册中心zookeeper已经启动了),在浏览器中访问:http://127.0.0.1:8080/ivan-dubbo-web/user/list/ 或 http://127.0.0.1:8080/ivan-dubbo-web/user/one/

看到如下信息则表示搭建成功,并可以将测试添加多个注册中心,多个服务提供者的容灾了:

猜你喜欢

转载自blog.csdn.net/qq_30270931/article/details/80507128