DubboxDemo

项目注意细节之处

  1. dubbox-xx.jar,特别要要注意,我这里提供了一个版本的jar:dubbo2.8.4.jar传送门: 百度云 密码:k8qs。
  2. 注意配置各个模块之间的依赖关系。
  3. 运行项目首先运行service模块,然后再运行web模块。且注意两者的Tomcat的端口号不能相同。
  4. 运行项目之前首先需要在SecureCRT中打开服务器的zookeeper注册中心。

项目测试环境

-|:-:|-:

JDK1.8|Tomcat8|maven|IDEA

项目目录结构

pom配置

解释

  1. 这里不再贴pom的相关依赖,详细内容请查看GitHub上的源码。
  2. 注意parent父项目中的pom.xml中定义的是jar依赖的相关版本,并不是写入进parentpom的依赖都会被使用,只有子模块调用了,才会使用相应的依赖。

注意

  1. 注意dubbo-xx.jar不能使用maven仓库中的依赖,可以选择使用我提供版本的jar。
  2. 除了上面说的框架提供的相关依赖,我们还需要配置模块间的依赖关系。
  3. 配置模块间的依赖关系除了idea的Module Setting,还需要手动添加pom坐标。
  4. Module Setting的依赖配置遵循调用那个模块就配置哪个模块,pom坐标遵循常见的三层架构设计。

服务端配置

Tomcat

  1. 需要注意的就是端口号,部署到服务器上的项目(模块—)必须占用的端口号不同,而在idea中除了有HTTP port、还有JMX port,这两个端口配置都不能重复出现。
  2. 启动项目(模块)时,先启动service生产者,再启动web消费者。

zookeeper

  1. zookeeper称为注册中心,所以启动service模块前首先要启动zookeeper。启动方式就是进入bin目录中输入./zkServer.sh start
  2. 需要在service以及web模块对应的spring配置文件中注册dubbo,并且配置连接zookeeper的地址。、

Spring环境配置

介绍

Spring的配置其实一共有三个部分:

  • spring-service
  • spring-dao
  • springmvc

分别对应的模块

  • service模块
  • dao模块
  • web模块

注意 我们知道配置了spring.xml,就需要在web.xml中加载这些配置文件,因为我们已经建立了各个模块之间的依赖关系,所以,我们仅需要在daoservice模块任意一个的web.xml中使用通配符的方式加载配置文件即可。

代码编写

beans-dao.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 数据库连接池 -->
    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:properties/db.properties"/>

    <!-- 数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="maxActive" value="10"/>
        <property name="minIdle" value="5"/>
    </bean>

    <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.mapper"/>
    </bean>
</beans>

beans-service.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
	<!-- 用dubbo协议在20881端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20881"/>
	<!-- 当前应用的名称(是注册中心识别的名称) -->
    <dubbo:application name="dubboxdemo-service"/>
    <!-- 注册中心地址(zookeeper) -->
    <dubbo:registry address="zookeeper://192.168.148.128:2181"/>
    <!-- 配置dubbo的包扫描 -->
    <dubbo:annotation package="cn.service.impl"/>
</beans>

这里我们需要注意的就是注册中心地址一定要填写正确,首先你需要打开服务器联网,并使用SecureCRT启动zookeeper,这是正常启动项目的前提。第二点就是注意配置dubbo的包扫描,可以使用我提供的dubbox-2.8.4.jar,一定不要使用maven仓库的jar,那样一定会报错的。这里配置的包扫描,同样会扫描@Controller之类的Spring的注解,如果你使用maven仓库的dubbox,你会发现根本不能扫描到@RequestMapping,访问项目映射就是404。

对应servicedao任意一个模块中的web.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <!-- 加载spring容器 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring/beans-*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

spring-web.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 当前应用名称(是注册中心识别的名称) -->
    <dubbo:application name="dubboxdemo-web"/>
    <!-- 注册中心地址(zookeeper) -->
    <dubbo:registry address="zookeeper://192.168.148.128:2181"/>
    <!-- 配置包扫描(同样不需要SpringMVC的包扫描) -->
    <dubbo:annotation package="cn.controller"/>

    <!-- SpringMVC的基本控制器 -->
    <mvc:annotation-driven/>
    <!-- 配置springmvc的视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

功能实现

查询功能

Controller

注意

  1. 注意使用dubbo@Reference注解完成依赖注入,但绝对不能使用@Autowird之类的注解完成注入的,这里调用的服务层是由远端提供的,并不是本地的服务对象,所以不能使用@Autowird注入。

我们看一下实际的web模块的目录结构:

service

如上所说,当我们调用的服务是由远端提供的,比如在这个案例中服务层是由zookeeper进行分配管理的,就使用@REference进行注入,如果你调用本地的服务,就可以使用@Autowired完成注入了。

看一下其目录结构

最后我们再看一下dao模块的目录结构

启动项目

  1. 先连接服务器并打开zookeeper

  1. 先启动service模块,再启动web模块

我这里再Tomcat中配置service模块的端口是9001;配置web模块的端口是9101

  1. 在浏览器中查看项目功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值