All In One 架构
例如:service.java(数据访问代码,控制跳转代码,业务处理代码)
缺点:所有代码在一个类/模块中编写,容易造成代码混乱
MVC/三层架构
例如: View:视图层
C: 控制层
M:模型层
缺点:虽将各个功能根据层次进行了划分,但是所有代码仍然在同一台计算机中编写,并发能力有限
RPC框架
客户端 - 服务端
优势:使用rpc,可以让一个项目部署在多个不同的计算机中
缺点:但是此种模式的ip+端口号比较分散,有一定的维护难度
SOA:面向服务的架构
客户端 - 注册中心 - 服务端
dubbo(阿里巴巴产品)
开发dubbon程序
1.准备环境
(1)linux中安装注册中心zookeeper
a.linux中安装jdk
下载jdk.rpm
安装: rpm -ivh jdk.rpm,会自动安装到usr目录中的java中,
通过pwd命令,查看jdk的安装路径
配置环境变量:
vi /etc/profile 在文件最后追加
export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
export CLASSPATH=$JAVA_HOME$\lib:$CLASSPATH
export PATH-$JAVA_HOME$\bin:$PATH
刷新环境变量
source /etc/profile
b.安装zookeeper
下载zookeeper解压,
解压tar -zxvf zookeeper压缩文件名
重命名zookeeper的配置文件:
在conf目录中执行: mv zoo_sample.cfg zoo.cfg
在zoo.cfg中:
可以发现zookeeper的端口号是clientPort=2181
设置zookeeper存放数据的目录:
dataDir=/apps/zookeeper-3.4.12/data
启动zookeeper:
在zookeeper-3.4.12的根目录执行:bin/zkServer.sh start
了解:
关闭zookeeper:
在zookeeper-3.4.12的根目录执行:bin/zkServer.sh stop
查看zookeeper:
在zookeeper-3.4.12的根目录执行:bin/zkServer.sh status
服务方代码:
pom.xml文件
服务方可以提供哪些服务:
接口及实现类:(具体的服务)
配置工作:
继承spring:web.xml
配置spring: applicationContext.xml
消费方代码:
a.引入依赖(jar)
pom.xml(与服务器方pom.xml一致,改端口号;并设置客户端自己的gav)
b.补齐web工程需要的WEB-INF/web.xml
c.配置springmvc(通过springmvc来访问提供方)
编写控制器代码:
用于访问服务方提供的服务代码
安装监听器(存在于dubbo-admin,而dubbo-admin又存在于incubator-dubbo-ops之中)
因此需要使用监听器,必须下载incubator-dubbo-ops,但是最新版的incubator-dubbo-ops是在spring boot中使用,
如果要使用旧的web版,则需要回退版本。但是旧版中,当前时间该版本不完整(没有提供完成的maven依赖),因此无法使用。
因此只能在历史提交记录中寻找一个可用的版本(Commints on May 18,2018),
将下载好的dubbo-admin源代码进行打包war,为了后续的运行。
执行打包好的dubbo-admin的war包;在linux中的tomcat中运行(将刚才的war包放入tomcat的webapps中即可)
在maven中引入一个 mvn仓库中不存在的jar:
将jar自己安装到本地mvn仓库:
mvn install:install-file DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=10.2.0.5.0 -Dpackaging=jar -Dfile=jar包的地址
配置
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>10.2.0.5.0</version>
</dependency>
zookeeper+dubbo+ssm+maven架构、父工程
步骤:
1.创建父工程(students-parent)
maven project:打包方式为pom
1)在pom.xml配置所有需要的依赖jar包
2.创建实体类工程(students-pojo)
maven project:打包方式为jar
1)创建一个实体类(Student)
如果一个对象需要从内存存到硬盘,或者需要网络传输,则必须序列化
即public class Students implements Serializable
2)在父工程pom.xm里面配置依赖实体类工程,
3.创建公共接口工程(students-common-interface)
maven project:打包方式为jar
1)创建业务逻辑层接口(StudentsService)
2)当前接口工程maven模块依赖于实体类pojo
在student-common-interface工程pom.xm里面配置依赖实体类工程
4.创建数据访问层(dao/mybatis)接口工程(students-dao)
Maven Model:选择依赖于父工程,打包方式为jar
1)将连接数据库操作MyBatis的映射文件StudentMapper.xml写进去
2)MyBitis的接口(StudentMapper)
3)将applicationContext-dao.xml和db.properties导入
4)i:在applicationContext-dao.xml配置加载db.properties文件(连接数据的信息)
ii:配置数据库信息(替代mybatis的配置文件conf.xml)
iii:配置MyBaties需要的核心类:SqlSessionFactory(1.加载数据源,2.扫描mapper.xml映射文件)
iiii:将MyBatis的SqlSessionFactory交给spring(交mapper的接口包放进去)
5.创建业务逻辑层实现类工程(students-service)
Maven Model:选择依赖于父工程,打包方式为war
1)因为war打包方式的工程,所以需要目录补充结构,
在webapp目录下创建WEB-INF文件,在WEB-INF里面创建web.xml
2)因为是service逻辑层所以需要依赖:dao、pojo、父工程
父工程在创建时建立,而父工程中又依赖于pojo
所以只需要在students-service的pom.xml文件中配置依赖dao
3)service是一个服务、发布、启动
在students-service的pom.xml文件中配置内置tomcat
4)在students-service的pom.xml文件中配置公共接口工程(students-common-interface)的依赖
5)创建业务逻辑接口的实现类
//Service依赖Dao(MyBitis的Mapper)
i:在web.xml中配置监听器,监听applicationContext*.xml文件
ii:将spring的配置文件applicationContext-service.xml导入
(配置dubbon的应用名称、配置注册中心、配置dubbon扫描包、配置spring扫描包)
6.创建显示层(包含控制层)工程(students-web)
Maven Model:选择依赖于父工程,打包方式为war
1)因为war打包方式的工程,所以需要补充目录结构,
在webapp目录下创建WEB-INF文件,在WEB-INF里面创建web.xml
2)在web工程引入springMVC.xml
i.web.xml文件中配置乱码处理
ii.web.xml文件中配置拦截器,将拦截到的所有请求交给springmvc.xml的DispatcherServlet处理
3)将springmvc.xml文件引入
i.配置dubbon的应用名称、配置注册中心地址、配置dubbon扫描包、将控制器所在包加入IOC容器
4)在pom.xml中
i.配置内置tomcat,
ii.配置公共接口工程(students-common-interface)的依赖
5)创建控制层StudentController
@AutoWire调用本计算机中的对象,实现DI注入
@Reference调用远程对象
7.启动tomcat
将除service工程和web工程(因为没有被任何依赖注入)外所有的工程在Run As中先Maven clean后Maven install(即在本地仓库先清理后注入)
因为数据访问层(dao/mybatis)接口工程(students-dao)的配置文件applicationContext-dao.xml没有被启动,所以当tomcat启动时访问失败
解决办法:在业务逻辑层实现类工程(students-service)的applicationContext-service.xml文件中配置<import resource="classpath:applicationContext-dao.xml"/>,使当启动service时候顺便把dao工程的配置文件applicationContext-dao.xml启动
在显示层(包含控制层)工程(students-web)的springMVC.xml文件中配置视图解析器
数据访问层(dao/mybatis)接口工程(students-dao)中因为mapper.xml文件所在的路径与tomcat打包存在一个bug(mapper.xml没有被打包),
所以需要在父工程pom.xml的<project>元素中加入
<build>
<resources>
<resource>
<directory>srv/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>srv/main/resources</directory>
</resource>
</resources>
</build>