淘淘商城系列(二)—— dubbo配置测试(八)

之前我们把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

出现这个则表示成功了。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良月柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值