文档章节

分布式服务框架之Dubbo整合Spring项目(二)

尚浩宇
 尚浩宇
发布于 2015/07/14 13:32
字数 1580
阅读 900
收藏 3

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:websocket="http://www.springframework.org/schema/websocket"  
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
    http://www.springframework.org/schema/tx  
    http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-4.0.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd
">
	<!-- 采用注释的方式配置bean -->
	<context:annotation-config />
	<!-- 定时器开关 开始 -->
	<!-- <task:annotation-driven /> -->
	<!-- 定时器开关 结束 -->
	<!-- <bean id="V3Timer" class="com.test.soa.timer.V3Timer"></bean> 
		<task:scheduled-tasks> 每天早上六点,中午十二点,下午八点清除一次缓存内脏数据 0 0 0,6,12,18 * * ? <task:scheduled 
		ref="V3Timer" method="clearOverdueCache" cron="0/30 * * * * ?" /> </task:scheduled-tasks> -->
	<!-- 配置要扫描的包 -->
	<context:component-scan base-package="scc.provider"></context:component-scan>
	<!-- 数据库配置文件位置 -->
	<context:property-placeholder location="classpath:config\jdbc.properties" />

	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		init-method="init" destroy-method="close">
		<property name="url" value="${jdbc_url}" />
		<property name="username">
			<value>${jdbc_user}</value>
		</property>
		<property name="password" value="${jdbc_password}" />
		<!-- 若密碼加密需指定程序解密 -->
		<!-- <property name="connectionProperties" value="config.decrypt=true" /> -->

		<!-- 根据url自动识别 这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName -->
		<!-- <property name="driverClassName" value="${driverClass}" /> -->
		<!-- 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall -->
		<property name="filters">
			<value>${filters}</value>
		</property>
		<!-- 最大连接池数量 -->
		<property name="maxActive">
			<value>${maxActive}</value>
		</property>
		<!-- 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 -->
		<property name="initialSize">
			<value>${initialSize}</value>
		</property>
		<!-- 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 -->
		<!-- <property name="maxWait"><value>60000</value></property> -->
		<!-- 最小连接池数量 -->
		<property name="minIdle">
			<value>${minIdle}</value>
		</property>
		<!-- 有两个含义:1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明 -->
		<property name="timeBetweenEvictionRunsMillis">
			<value>${timeBetweenEvictionRunsMillis}</value>
		</property>
		<property name="minEvictableIdleTimeMillis">
			<value>${minEvictableIdleTimeMillis}</value>
		</property>
		<!-- 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。 -->
		<!-- <property name="validationQuery"><value></value></property> -->
		<!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 -->
		<property name="testWhileIdle">
			<value>${testWhileIdle}</value>
		</property>
		<!-- 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 -->
		<property name="testOnBorrow">
			<value>${testOnBorrow}</value>
		</property>
		<!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 -->
		<property name="testOnReturn">
			<value>${testOnReturn}</value>
		</property>


		<!-- 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。 -->
		<!-- <property name="poolPreparedStatements"><value>false</value></property> -->
		<!-- 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 -->
		<!-- <property name="maxOpenPreparedStatements"><value>-1</value></property> -->


		<!-- 配置removeAbandoned对性能会有一些影响,建议怀疑存在泄漏之后再打开。在上面的配置中,如果连接超过30分钟未关闭,就会被强行回收,并且日志记录连接申请时的调用堆栈。 -->
		<!-- 打开removeAbandoned功能 -->
		<!-- <property name="removeAbandoned" value="true" /> -->
		<!-- 1800秒,也就是30分钟 -->
		<!-- <property name="removeAbandonedTimeout" value="1800" /> -->
		<!-- 关闭abanded连接时输出错误日志 -->
		<!-- <property name="logAbandoned" value="true" /> -->
	</bean>
	<!-- 配置mybitasSqlSessionFactoryBean -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		
	</bean>

	<!-- mapper.xml文件对应的接口 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="scc.provider.dao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>
	<!-- 事务配置 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<tx:annotation-driven transaction-manager="transactionManager" />
	<import resource="dubbo.xml"/>
</beans>

dubbo.xml

<?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">
	<!-- 具体的实现bean -->
	<!-- <bean id="IUserService" class="com.dubbo.test.service.impl.UserServiceImpl" /> -->

	<!-- 提供方应用信息,用于计算依赖关系 -->
	<dubbo:application name="dubbo_provider" />

	<!-- 使用multicast广播注册中心暴露服务地址 <dubbo:registry address="multicast://224.5.6.7:1234" 
		/> -->

	<!-- 使用zookeeper注册中心暴露服务地址 -->
	<dubbo:registry address="zookeeper://192.168.0.56:2181" />

	<!-- 用dubbo协议在20880端口暴露服务 -->
	<dubbo:protocol name="dubbo" port="20880" />

	<!-- 声明需要暴露的服务接口 -->
	<dubbo:service interface="com.common.inter.IUserService"	ref="userServiceImpl" />

</beans>

接口实现类

package scc.provider.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import scc.provider.dao.IUserDao;

import com.alibaba.dubbo.rpc.RpcContext;
import com.common.inter.IUserService;
import com.common.vo.User;

@Service
public class UserServiceImpl implements IUserService{
	@Autowired
	private IUserDao userDao;

	public void insert(User user) {
		System.out.println(RpcContext.getContext().getAttachment("index"));
		userDao.insert(user);
	}

	public User getUserById(Integer id) {
		return userDao.getUserById(id);
	}

	public List<User> getUsers() {
		return userDao.getUsers();
	}
	
}

上面至贴出关键部分代码,文章末尾会提供demo下载。

然后是服务消费者项目:

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:websocket="http://www.springframework.org/schema/websocket"  
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
    http://www.springframework.org/schema/tx  
    http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-4.0.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd
">
	<!-- 采用注释的方式配置bean -->
	<context:annotation-config />
	<!-- 定时器开关 开始 -->
	<!-- <task:annotation-driven /> -->
	<!-- 定时器开关 结束 -->
	<!-- <bean id="V3Timer" class="com.test.soa.timer.V3Timer"></bean> 
		<task:scheduled-tasks> 每天早上六点,中午十二点,下午八点清除一次缓存内脏数据 0 0 0,6,12,18 * * ? <task:scheduled 
		ref="V3Timer" method="clearOverdueCache" cron="0/30 * * * * ?" /> </task:scheduled-tasks> -->
	<!-- 配置要扫描的包 -->
	<context:component-scan base-package="scc.cunsumer.controller"></context:component-scan>

	<import resource="dubbo.xml"/>
</beans>

dubbo.xml

<?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:application name="dubbo_consumer" />

	<!-- 使用zookeeper注册中心暴露服务地址 -->
	<!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
	<dubbo:registry address="zookeeper://192.168.0.56:2181" />

	<!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->
	<dubbo:reference id="userService"	interface="com.common.inter.IUserService" />
</beans>


© 著作权归作者所有

尚浩宇

尚浩宇

粉丝 68
博文 149
码字总数 125023
作品 3
朝阳
程序员
私信 提问
Spring Cloud 入门教程:聊聊Spring Cloud

一、 Spring Cloud 是什么? Spring Cloud 是将分布式系统中一系列基础框架/工具进行整合的框架。其中包含:服务注册与发现、服务网关、熔断器、配置中心、消息中心、服务链路追踪等等。 Sp...

吴伟祥
2018/12/03
0
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
2018/12/13
0
0
推荐几个自己写的Java后端相关的范例项目(转载)

http://wosyingjun.iteye.com/blog/2312553 这里推荐几个自己写的范例项目,主要采用SSM(Spring+SpringMVC+Mybatis)框架,分布式架构采用的是(dubbo+zookeeper)。范例项目的好处是简单易...

指尖的舞者
2016/09/27
147
0
Dubbo和Spring Cloud微服务架构

微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。虽然微服务架构没有公认的技术标...

烛光Java后端开发
2018/10/24
0
0
看看8年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构

微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。虽然微服务架构没有公认的技术标...

Java大蜗牛
2018/07/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聚合与组合的关系

作者总结的很好 http://www.360doc.com/content/07/0612/11/16903_553244.shtml

南桥北木
4分钟前
0
0
好程序员web前端分享DIV+CSS3和html5+CSS3有什么区别

好程序员web前端分享DIV+CSS3和html5+CSS3有什么区别,不管是DIV+CSS3还是html5+CSS3,他们都是我们对网页开发布局方式的统称,但是DIV+CSS3作为网页的基础开发这句话其实并不严谨,因为而d...

好程序员IT
10分钟前
0
0
比特币应用开发10大必备NuGet包

如果要在.NET环境下开发比特币应用,本文列出的10个NuGet开发包是你不可或缺的利器。 如果要快速掌握.NET平台下比特币的应用开发,推荐访问汇智网的课程: C#比特币开发详解 1、NBitcoin C#...

汇智网教程
11分钟前
0
0
Debian 10 Buster发布的新功能

Debian 10 Buster即将发布。第一个候选版本已经出局,我们应该会在几周内看到最终版本。 Debian 10 Buster发布时间表 Debian 10 Buster没有设定的发布日期。为什么会这样?与其他发行版不同,...

叫我甘道夫
21分钟前
2
0
从入侵到变现——“黑洞”下的黑帽SEO分析

概述 由于互联网入口流量主要被搜索引擎占据,网站在搜索引擎中的排名直接影响到市场营销效果,因此SEO服务应运而生。SEO(Search Engine Optimization)全称为搜索引擎优化,是指利用搜索引擎...

zhaowei121
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部