之前我们把dao层,service层,表现层都整合好了,接下来就需要进行测试了,对dubbo进行测试。
假如现在有个需求,浏览器发送一个情况,到数据库查询当前时间。调用的流程,首先访问的是controller,在调用service层,在调用dao层,最后dao层去数据库查询时间。
查询数据库时间的SQL命令
select NOW()
执行结果是:
它返回的值一个字符串时间,所以我们方法也可以直接返回一个字符串。调用流程是从controller开始的,我们开发的话,需要反过来,从dao层开始开发。
在taotao-manager-dao项目中
创建com.taotao.mapper包,在新建一个接口,名字叫做TestMapper,这个接口就是到数据库查询当先时间的。
在接口里面,写个方法
package com.taotao.mapper;
/**
* 测试接口 查询当前的时间
* @author Administrator
*
*/
public interface TestMapper {
public String queryNow();
}
接口创建好了,还需要创建一个映射文件,创建的时候名字一定要和接口名称一致。
导入头部信息,并创建查询的方法
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.taotao.mapper.TestMapper">
<select id="queryNow" resultType="string">
select NOW()
</select>
</mapper>
namespace是包名,id是接口里面的方法名,resultType是返回参数的类型。
dao层创建好了,之后去service层,在taotao-manager-interface项目里面,创建com.taotao.service包,新建一个TestService接口
接口里面的内容和TestMapper接口是一样的
package com.taotao.service;
/**
* 测试接口 查询当前的时间
* @author Administrator
*
*/
public interface TestService {
//查询当前的时间
public String queryNow();
}
之后再taotao-manager-service项目中,创建com.taotao.service.impl包,新建一个TestServiceImpl类
该类时TestService的实现类,实现TestService,在该类上面加上@Service注解,导入的时候要注意,是
这个包的@Service注解,别导入错了。
package com.taotao.service.impl;
import org.springframework.stereotype.Service;
import com.taotao.service.TestService;
@Service
public class TestServiceImpl implements TestService {
@Override
public String queryNow() {
return null;
}
}
在queryNow()方法里面的操作步骤
1、注入mapper
2、调用mapper的方法 返回
package com.taotao.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.taotao.mapper.TestMapper;
import com.taotao.service.TestService;
@Service
public class TestServiceImpl implements TestService {
@Autowired
private TestMapper mapper;
@Override
public String queryNow() {
//1.注入mapper
//2.调用mapper的方法 返回
return mapper.queryNow();
}
}
到这里service就可以了,不过还需要发布服务,在taotao-manager-service项目中的applicationContext-service.xmlo配置文件中发布
首先需要添加dubbo的约束,如果添加之后,还报错可以参考这个文章【dubbo之.xml配置文件报错】里面有详细介绍。
dubbo:application 标签的name的值你可以随便写,只是用来计算依赖关系的,统计谁被谁调用了,可以看这个,整个名字虽然可以随便取,但是其他的项目不要喊这个名字了,两个一样的,你都不知道哪个是哪个了。
dubbo:registry标签是注册中心,要注册到注册中心,要配置这个,protocol是固定的,address是你注册中心的ip地址,端口号是zookeeper里zoo.cfg配置文件里所写的,一般默认是2181,address里就是IP地址:端口号的格式
dubbo:protocol标签是,把这个服务暴露出来,name是固定的,port是可以修改的,不是固定的,它是在本机上面的,本机把20880暴露出来,其他调用这个机器的该端口就可以了。
dubbo:service标签的作用是,暴露我们的服务接口,interface是我们刚刚创建的接口的包名+类名,ref是实现类的类名,名字的首字母要小写。为什么要小写呢?扫描包的时候,我们实现类上面加了@Service注解,所以id就是首字母就是小写的。
贴一下配置文件的代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 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-4.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
<context:component-scan base-package="com.taotao.service"></context:component-scan>
<!-- 使用dubbo发布服务 -->
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="taotao-manager" />
<dubbo:registry protocol="zookeeper" address="192.168.195.135:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.taotao.service.TestService" ref="testServiceImpl" />
</beans>
这样服务就发布完成了。
发布服务的步骤:
1.连接注册中心
2.暴露服务端口
3.接口暴露出来
这样,服务层就搞定了。
接下来我们到表现层去,实现查询的功能。在taotao-manager-web项目中,新建com.taotao.controller包,创建一个TestController类
在controller类的创建一个queryNow()方法
动手之前先来分析一下queryNow方法里面的代码该如何写
1、引入服务
2、注入服务
3、调用服务的方法
引入服务:在taotao-manager-web项目中的springmvc.xml配置文件中引入服务
<!-- 引用dubbo服务 -->
<dubbo:application name="taotao-manager-web"/>
<dubbo:registry protocol="zookeeper" address="192.168.195.135:2181"/>
<dubbo:reference interface="com.taotao.service.TestService" id="testService" />
前面对这些标签已经讲解过了,这里不阐述了,不过dubbo:reference标签要说一下,这是引入服务的标签,interface是包名+接口名字,这个不是凭空来的,需要在pom.xml引入taotao-manager-service项目的依赖,才可以
添加依赖之后,鼠标放到包名上面,是会出现下划线的,这时候就可以了。
<!-- manager interface接口 -->
<dependency>
<groupId>com.taotao</groupId>
<artifactId>taotao-manager-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
id是这个接口的名字首字母小写。
注入服务:
@Autowired
private TestService testService;
这个在controller类里面加,只要你加了这个,就会通过
会通过代理的方式,通过这个接口生从一个代理对象,会用spring容器管理起来,我们就可以注入了。它id就叫这个,就是我们这个接口的实现类。
调用服务的方法:
testService.queryNow();
TestController的代码:
package com.taotao.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.taotao.service.TestService;
/**
* 测试使用的controller 查询当前的时间
* @author Administrator
*
*/
@Controller
public class TestController {
@Autowired
private TestService testService;
@RequestMapping("/test/queryNow")
@ResponseBody
public String queryNow(){
return testService.queryNow();
}
}
到这里就开发完成了,我们去测试一下,先把注册中心启动,不知道如何启动的童鞋参考这篇文章:淘淘商城系列(二)—— 安装zookeeper注册中心(三)
接着分别先启动服务层的工程和服务层的功能,不过启动之前,先安装,这里我们之间安装全部
点击taotao-manager 选择run as maven install
控制台这里出现BUTLD SUCCESS表示安装成功。
如果出现该错误
需要设置Java编译的环境是JDK 而不是JRE ,改成JDK即可:
启动的之后,访问报错:
原因是:映射文件并没有拷贝到classpath下导致。
解决mapper映射文件不发布的问题
在taotao-manager-dao工程中的pom文件中添加如下内容:
<build>
<!-- 如果不配置mybatis的配置文件会漏掉 -->
<!-- 注意:配置了此方式,原来的默认的资源拷贝行为将无效 -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
改好后需要选择taotao-manager-dao工程执行
run as maven install
再启动,先启动服务层,后启动表现层。
在浏览器里输入:http://localhost:8081/test/queryNow
出现这个则表示成功了。