这样我们就有了如下的依赖关系:
2 创建bean模块
同时我们把UserManage中的bean剪切到bean模块中
bean模块报错是因为其中引用了通用mapper,所以我们把通用mapper的依赖提取出来放到bean模块后面,变成如下结构。
bean模块的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
<modelVersion>4.0.0</modelVersion>
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-bean</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<artifactId>gmall-parent</artifactId>
<groupId>com.atguigu.gmall</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
由于依赖包分布于多个模块中,最好有一个地方能够把所有依赖的版本通用管理起来。
这就用到了maven的概念。可以让所有的模块都继承这个parent模块,由这个parent模块来管理版本。
3 搭建parent模块
parent模块的 pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.atguigu.gmall</groupId><artifactId>gmall-parent</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><fastjson.version>1.2.46</fastjson.version><dubbo-starter.version>1.0.10</dubbo-starter.version><dubbo.version>2.6.0</dubbo.version><zkclient.version>0.10</zkclient.version><mybatis.version>1.3.1</mybatis.version><nekohtml.version>1.9.20</nekohtml.version><xml-apis.version>1.4.01</xml-apis.version><batik-ext.version>1.9.1</batik-ext.version><jsoup.version>1.11.2</jsoup.version><httpclient.version>4.5.5</httpclient.version><commons-lang3.version>3.7</commons-lang3.version><mapper-starter.version>1.2.3</mapper-starter.version><jedis.version>2.9.0</jedis.version><jest.version>5.3.3</jest.version><jna.version>4.5.1</jna.version><beanUtils.version>1.9.3</beanUtils.version></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><dependencyManagement><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>${zkclient.version}</version></dependency><dependency><groupId>com.gitee.reger</groupId><artifactId>spring-boot-starter-dubbo</artifactId><version>${dubbo-starter.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>net.sourceforge.nekohtml</groupId><artifactId>nekohtml</artifactId><version>${nekohtml.version}</version></dependency><dependency><groupId>xml-apis</groupId><artifactId>xml-apis</artifactId><version>${xml-apis.version}</version></dependency><dependency><groupId>org.apache.xmlgraphics</groupId><artifactId>batik-ext</artifactId><version>${batik-ext.version}</version></dependency><!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>${jsoup.version}</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>${httpclient.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>${commons-lang3.version}</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>${mapper-starter.version}</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>${jedis.version}</version></dependency><!-- https://mvnrepository.com/artifact/io.searchbox/jest --><dependency><groupId>io.searchbox</groupId><artifactId>jest</artifactId><version>${jest.version}</version></dependency><!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna --><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>${jna.version}</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>${beanUtils.version}</version></dependency></dependencies></dependencyManagement></project>
然后在idea右边菜单执行安装
那么除了通用mapper以外其他的第三方依赖我们如何放置
4 搭建 util模块
首先我们可以把所有的第三方依赖包分为四种
web业务模块用到的第三方包,比如文件上传客户端、页面渲染工具、操作cookie的工具类等等。 | service业务模块用到的第三方包,比如jdbc、mybatis、jedis、activemq工具包等等。 | 通用型的第三方包,比如fastjson、httpclient、apache工具包等等。 | 只有本模块用到的 es |
基于这四种情况我们可以搭建如下的依赖结构:
创建common-util的模块
创建gmall-web-util和gmall-service-util
创建service-util模块
创建web-util模块
pom.xml文件
首先先分析具体哪些包是通用的
gmall-common-util
spring-boot-starter-test | 测试(springboot有默认版本号) | |
spring-boot-starter-web | 内含tomcat容器、HttpSevrletRequest等 | (springboot有默认版本号) |
fastjson | json工具 | |
commons-lang3 | 方便好用的apache工具库 | |
commons-beanutils | 方便好用的apache处理实体bean工具库 | |
commons-codec | 方便好用的apache解码工具库 | |
httpclient | restful调用客户端 |
gmall-web-util
thymeleaf | springboot自带页面渲染工具(springboot有默认版本号) |
gmall-service-util
spring-boot-starter-jdbc | 数据库驱动(springboot有默认版本号) |
mysql-connector-java | 数据库连接器(springboot有默认版本号) |
mybatis-spring-boot-starter | mybatis |
gmall-common-util的pom.xml
<?xml version="1.0" encoding="UTF-8"?> 4.0.0 com.atguigu.gmall gmall-common-util 1.0-SNAPSHOT com.atguigu.gmall gmall-parent 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-test org.springframework.boot spring-boot-starter-web org.apache.httpcomponents httpclient org.apache.commons commons-lang3 commons-beanutils commons-beanutils commons-codec commons-codec |
gmall-web-util的pom.xml
<?xml version="1.0" encoding="UTF-8"?> gmall-parent com.atguigu.gmall 1.0-SNAPSHOT 4.0.0 gmall-web-util com.atguigu.gmall 1.0-SNAPSHOT com.atguigu.gmall gmall-common-util 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-thymeleaf |
gmall-service-util的pom.xml
<?xml version="1.0" encoding="UTF-8"?> gmall-parent com.atguigu.gmall 1.0-SNAPSHOT 4.0.0 gmall-service-util com.atguigu.gmall gmall-common-util 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-jdbc org.mybatis.spring.boot mybatis-spring-boot-starter mysql mysql-connector-java runtime redis.clients jedis |
创建interface模块
5 搭建interface模块
把UserManageService接口移动到该模块下
interface的pom.xml
<?xml version="1.0" encoding="UTF-8"?> com.atguigu.gmall gmall-interface 1.0-SNAPSHOT 4.0.0 jar com.atguigu.gmall gmall-bean 1.0-SNAPSHOT |
最终的结构图
编辑搜图
请点击输入图片描述(最多18字)
6 gmall-User-manage模块
pom.xml
<?xml version="1.0" encoding="UTF-8"?> 4.0.0 com.atguigu.gmall gmall-user-manage 0.0.1-SNAPSHOT jar gmall-user-manage Demo project for Spring Boot com.atguigu.gmall gmall-parent 1.0-SNAPSHOT com.atguigu.gmall gmall-interface 1.0-SNAPSHOT com.atguigu.gmall gmall-service-util 1.0-SNAPSHOT org.springframework.boot spring-boot-maven-plugin |
其他的类,要重新引一下包
1 同时要修改bean的引入 | 2 同时要修改@Service和@Autowrited注解 | 3 将接口和bean转移到bean和interface项目中 | 4 原来user-manage中的mapper,service接口,和实现类中的引用bean类的位置需要修改 | import com.atguigu.gmall.usermanage.bean.UserInfo; | import com.atguigu.gmall.bean.UserInfo; | 5 重新安装maven |
7 继续开发gmall-order-web模块
order-web的pom.xml
<?xml version="1.0" encoding="UTF-8"?> 4.0.0 com.atguigu.gmall gmall-order-web 0.0.1-SNAPSHOT jar gmall-order-web Demo project for Spring Boot com.atguigu.gmall gmall-parent 1.0-SNAPSHOT com.atguigu.gmall gmall-interface 1.0-SNAPSHOT com.atguigu.gmall gmall-web-util 1.0-SNAPSHOT org.springframework.boot spring-boot-maven-plugin |
修改gmall-usermanage pom.xml
<?xml version="1.0" encoding="UTF-8"?> 4.0.0 com.atguigu.gmall1108 gmall-usermanage 0.0.1-SNAPSHOT jar gmall-usermanage Demo project for Spring Boot com.atguigu.gmall1108 gmall-parent 1.0-SNAPSHOT com.atguigu.gmall1108 gmall-interface 1.0-SNAPSHOT com.atguigu.gmall1108 gmall-service-util 1.0-SNAPSHOT org.springframework.boot spring-boot-maven-plugin |
OrderController
@Controllerpublic classOrderController { UserManageService userManageService; @ResponseBody @RequestMapping(value = “initOrder”) publicString initOrder(HttpServletRequest request){ String userId = request.getParameter(“userId”); List userAddressList = userManageService.getUserAddressList(userId); String jsonString = JSON.toJSONString(userAddressList); returnjsonString; } } |
这样虽然引入的包,可以认出UserManageService,但是这个接口没有被注入。原来利用Spring可以注入,但是现在实现类不在同一个模块如何注入?
三、Dubbo和zookeeper
那dubbo和zookeeper如何引入?
dubbo其实是一组jar包,通过maven引入就可以。
zookeeper是一个开源的服务软件,需要安装到linux中。
1、安装zookeeper
1.1安装环境:
linux版本: CentOS 6.8
zookeeper版本 zookeeper-3.4.11.tar.gz
拷贝zookeeper-3.4.11.tar.gz到/opt下,并解压缩
改名叫zookeeper
1.2制作开机启动的脚本
把如下脚本复制进去
#!/bin/bash#chkconfig:2345 20 90#description:zookeeper#processname:zookeeperZK_PATH=/opt/zookeeperexport JAVA_HOME=/opt/jdk1.8.0_152case $1 instart) sh $ZK_PATH/bin/zkServer.sh start;;
stop) sh $ZK_PATH/bin/zkServer.sh stop;;
status) sh $ZK_PATH/bin/zkServer.sh status;;
restart) sh $ZK_PATH/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;esac
然后把脚本注册为Service
增加权限
1.3初始化zookeeper配置文件
拷贝/opt/zookeeper/conf/zoo_sample.cfg
到同一个目录下改个名字叫zoo.cfg
然后咱们启动zookeeper
以上状态即为安装成功。
2 dubbo的使用
dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以你不用在Linux上启动什么dubbo服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。
2.1安装监控软件:
材料: tomcat8 + dubbo-admin
拷贝tomcat8和dubbo-admin到/opt目录下
然后把dubbo-admin-2.6.0.war拷贝到tomcat的webapps目录下
2.2设置开机启动tomcat
[root@localhost tomcat4dubbo]# vim /etc/init.d/dubbo-admin
复制如下脚本
#!/bin/bash#chkconfig:2345 21 90#description:dubbo-admin#processname:dubbo-adminCATALANA_HOME=/opt/tomcat4dubboexport JAVA_HOME=/opt/jdk1.8.0_152case $1 instart)echo "Starting Tomcat..."$CATALANA_HOME/bin/startup.sh
;;
stop)echo "Stopping Tomcat..."$CATALANA_HOME/bin/shutdown.sh
;;
restart)echo "Stopping Tomcat..."$CATALANA_HOME/bin/shutdown.sh
sleep 2echoecho "Starting Tomcat..."$CATALANA_HOME/bin/startup.sh
;;
*)echo "Usage: tomcat {start|stop|restart}";; esac
然后同样的注册进入到服务中
[root@localhost tomcat4dubbo]# chkconfig --add dubbo-admin
加入权限
[root@localhost tomcat4dubbo]# chmod +x dubbo-admin
如果想改变端口号去tomcat中的server.conf中修改,课件中已改为7080,然后就可以启动服务了。
2.3 启动服务
[root@localhost tomcat4dubbo]# service dubbo-admin start
启动后用浏览器访问
可以看到要提示用户名密码,默认是root/root
(修改的话,可以去)
打开这个界面就说明,dubbo的监控服务已经启动。但是现在咱们还没有搭建dubbo的提供端和消费端。
3 开发功能
3.1 引入dubbo的依赖
spring-boot-starter-dubbo
dubbo
zkclient
这个依赖首先要放到gmall-parent工程中,用来定义要引入的三个包是什么版本。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
<modelVersion>4.0.0</modelVersion>
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<fastjson.version>1.2.46</fastjson.version>
<mapper.version>3.4.6</mapper.version>
<dubbo-starter.version>1.0.10</dubbo-starter.version>
<dubbo.version>2.6.0</dubbo.version>
<zkclient.version>0.10</zkclient.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>${mapper.version}</version>
</dependency>
<dependency>
然后加入到gmall-common-util模块中
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.gitee.reger</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
</dependency>
3.2 如何使用:这样在所有的业务模块中都可以使用dubbo了。
dubbo的使用分为提供端和消费端。使用起来非常方便只要记住两个注解@Reference和@Service,加上application.properties的一段配置就可以了。
3.3 提供端
顾名思义就是提供服务供别人调用的,相当于spring中的Service的实现类。
使用也很简单,就是一个注解加一份配置
提供端在实现类上增加注解 @Service,和spring的是一样的但是引的包是不一样的。如下
在UsermanageServiceImpl实现类上重新引包,这次引入com.alibaba.dubbo.config.annotation这个包。
在application.properties中增加
spring.dubbo.application.name=usermanage****spring.dubbo.registry.protocol=zookeeper****spring.dubbo.registry.address=192.168.67.159:2181spring.dubbo.base-package=com.atguigu.gmall****spring.dubbo.protocol.name=dubbo |
其中:
application.name就是服务名,不能跟别的dubbo提供端重复
registry.protocol 是指定注册中心协议
registry.address 是注册中心的地址加端口号
protocol.name 是分布式固定是dubbo,不要改。
base-package 注解方式要扫描的包
port 是服务提供端为zookeeper暴露的端口,不能跟别的dubbo提供端重复。
3.4 消费端
order-web模块application.properties****配置
| |