淘淘商城(4)
SSM框架整合
1.使用mysql数据库,要求5.5版本以上
2.Mybatis****:根据表结构,自动生成pojo和dao接口及映射文件
****自动生成代码
先把文件导入到工程里面,不是maven工程,选择Genaral
在反向生成里都生成什么内容?
根据数据库里面的表反向生成pojo(实体类bean)和dao,dao里面放mybatis中接口和映射文件
generatorConfig.xml文件
①既然是通过数据库中的表反向生成,首先配置数据库连接
②要将数据库中的表反向生成一个pojo,那么要告诉它,我要将pojo放在哪个包中
映射文件的位置
接口的位置
③逆向生成代码,只需要运行main方法就行了
控制台报错了,应该是mysql没启动,因为它是根据数据库中的表生成代码,没启数据库肯定是不行的
启动服务,再Run as,运行成功,刷新看一下。
pojo里面就是我们表中的实体类,dao里面有两部分,大把大把的接口和映射文件。
接口和映射文件放在一个包下,同时保证名称是一致的,这样可以使用包扫描机制,同时扫描。
既然Run as就能自动生成代码,如果再运行一次呢?
运行没有报警告,刷新文件也没有多生成出来包,看了下里面的代码行数也是没变化,为了以防后续出问题,我选择删了重新Run as一遍。
这些生成的代码,只是存在generatorSqlmap文件中,并没有存在Maven项目中,复制粘贴到对应包的src/main/java中,end
搭建环境,整合项目
使用的是soa架构(面向服务对象的架构)分两层。
taotao-manager是一个服务层项目,访问数据库,产生数据为表现层服务。
taotao-manager-web是一个表现层的web项目,只和页面进行交互
Dao层:配置mtbatis相关的配置,数据库、数据源
mybatis虽然是dao层的配置,但是taotao-manager-dao最终被打成了jar包,可以将mybatis配置在service里面
数据文件db.properties
接下来是application-dao.xml。之前dao层需要依赖的jar包是mybatis,数据源,连接池
spring管理SqlSessionFactory,目的创建sqlsessionfactory(?)
扫描mybatis配置文件的方式有三种通过接口扫描,类扫描,包扫描。
通过包扫描的话,需要包里面的接口名和配置文件名需要保持一致
配置application-service.xml
exclude-filter:过滤掉controller
dubbo服务最后再写。
接下来是application-trans.xml
当前项目中的方法,以红框里的名字开头事务就会开启(增删改)。而下面的查询就不需要依赖事务,只读。
当前的方法作用于哪些包、类。当前包下面的所有类(*)的方法(*)不管有没有参数(..)都会被匹配到事务规则。
taotao-manager-service里面的web.xml配置sping监听器为表现层做服务。
<context-param>指定sping的配置路径
编码集过滤器和前端控制器是处理前端请求应该放在taotao-manager-web中的web.xml中
spring开启一个父容器,springmvc开启子容器。当配置前端控制器的时候会默认开启一个子容器。
子容器能访问父容器的一部分bean,但是父容器不能访问子容器的bean。
所以,在子容器中只扫描controller,父容器扫描controller之外的其他注解
最后配置springmvc文件
ssm框架整合完毕
系统间通讯
我在这里使用的dubbo服务进行远程通讯,使用rpc协议进行远程调用,直接使用socket通信,传输效率高,并且可以统计系统之间的调用关系,调用次数。scoket(二进制方式进行传输)
ORM:关系对象模型;All in One,所有功能放在一个项目中,传统的web项目
网站流量小,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本
MVC:model、view、controller
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
RPC:
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
SOA:面向服务的架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。
Dubbo是什么?
Dubbo就是资源调度和治理中心的管理工具
一款分布式服务框架
高性能和透明化的RPC远程服务调用方案
SOA服务的治理方案
Doubbo的架构
Container: 服务运行容器
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
调用流程
0.服务容器负责启动,加载,运行服务提供者。
1.服务提供者在启动时,向注册中心注册自己提供的服务。
2.服务消费者在启动时,向注册中心订阅自己所需的服务。
3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
Container:类似spring容器,在spring中运行
Provider:相当于项目中的服务层taotao-manager-service为web做服务
Registry:类似一个中介。。。
Consumer相当于项目中的taotao-manager-web
Monitor:监控器,消费者调用了服务几次,调用的时间
自己的理解:①服务提供方(可能不止一个)将所有拥有的服务告诉给(注册到)注册中心,
②消费者告诉注册中心需要什么服务,去注册中心找这些服务③注册中心把提供方提供给自己的信息返回给消费者
④找到合适的信息后,直接去调用服务提供方的服务⑤一旁的监控器在默默地注视着这一切
Dubbo使用方法
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小,建议使用Zookeeper注册中心。
什么意思呢,也就是说启动服务之前必须要启动zookeeper工具,完成服务提供者和消费者与注册中心之间的交互
电脑配置不好的情况下,在Windows下安装就行了,可以不在Linux下安装。
安装步骤省略(很简单)。。。直接启动看效果吧。
找到zookeeper的目录,在dos命令中输入下面这两个文件名
启动前
启动后更新一下maven项目
整合测试
需求:根据商品id查询商品信息,并将商品信息使用json数据返回。
分析:
请求的url:/item/{itemId}
参数:商品id,从请求的url中获得
返回值:TbItem对象,****生成的pojo(响应json数据)
首先看下****生成的dao,找到根据商品id查询商品信息的接口可以看到id的类型是bigint,在mysql中如果类型是bigint要用Long类型对应
接下来开发Service层,Service分两层taotao-manager-interface接口 taotao-manager-service实现类
新建一个接口ItemService
接口建完之后,在taotao-manager-service实现
在这里加入@Service注解的作用就是自动注册到spring容器,成为spring容器中的bean
spring自动扫描com.qhit路径下的注解
将dao注入到service里面
然后就可以调用dao里的方法
接下来就是controller
将controller成为控制器加@Controller注解
然后加service依赖
写方法
@ResponseBody注解:以json数据形式返回
在service中暴露dubbo接口,在web中引用接口
在taotao-manager-service中的application-service.xml配置dubbo
刚才已经开启了zookeeper,将我们的服务注册到注册中心,将taotao-manager注册到注册中心
协议是zookeeper,地址是127.0.0.1,端口号是2181
通过20880端口暴露接口(大于20000随便写)
以com.qhit.service.ItemService(ItemService)接口暴露itemServiceImpl服务,这就是服务提供方
已经在service中加了@Service注解,将服务注册spring容器里面了
名称根据类名小写当做服务名字,使用@Service注解时出现的一个bean
接下来看taotao-manager-web中的springmvc
id和controller里面的属性保持一致
服务方配好,web也配好了zookeeper注册中心也启动了。测试
报错。
同一处错误,找不到依赖的这个pagehelper jar包信息。
然后开始排错,很明显的错误,肯定是jar包问题。接下来我开始:
重新打一遍包install,clean后再install,没用
Update Maven:更新项目,没用
Dependency Hierarchy:看是不是jar包冲突了,并没有。
去pom文件里面看是不是缺少哪个项目依赖,并没有。
去本地仓库找到对应的jar包位置delete,并Update Maven触发自动下载缺少的jar包,没用。
重启eclipse试试,更新项目,没用。
之前并没有出过这个错误,即使有类似的,一会也就解决掉了。
电脑还卡的实在不行,改了N久都没用
好的,接下来怎么办,当然是洗洗睡了,要不等猝死呢。