e3mall_day02

一.工程加入dubbo和zookeeper

  1.dubbo是服务的中间件,可以提高我们表现层访问服务层的效率,zookeeper是它dubbo支持且推荐使用作为注册中心。

  2.安装好zookeeper后,启动zookeeper即可

  3.想要使用dubbo和zookeeper,只需要引入相关的jar即可,由于dubbo和zookeeper的作用对象都涉及消费者和提供者两者,所以在web和service都得引入dubbo和zookeeper的jar包.

  4.引入dubbo的jar时,它会依赖spring和netty的jar包,我们要把这两个给排除掉不让其加入,避免与我们原先的spring冲突

<!-- dubbo相关 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.jboss.netty</groupId>
                    <artifactId>netty</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>

  5.记得导入约束dubbo的约束文件,然后我们在web和service的springmvc.xml和applicationContext-service.xml添加dubbo相关的标签来调用服务和暴露服务

    <!-- 使用dubbo发布服务 -->
    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="e3-manager" />
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="cn.e3mall.service.ItemService" ref="itemServiceImpl"/>
    <!-- 引用dubbo服务 -->
    <!-- 指代服务消费者的应用程序,name为程序名,可任意,最好跟工程名一致 -->
    <dubbo:application name="e3-manager-web"/>
    
    <!-- 指代注册中心,protocol指明哪个注册中心,address指代注册中心的ip地址 -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
    
    <!-- 表示引用服务的标签,interface要调用的接口,id表示该标签 -->    
    <dubbo:reference interface="cn.e3mall.service.ItemService" id="itemService" />

  6.在启动web和manager工程前,由于是两个工程,需要两个tomcat来启动,还要在web中再配置tomcat插件

  7.为pojo实现序列化接口,并重新安装到本地仓库,在重新启动工程

  8.先启动manager后启动web,若控制台一直卡在某个地方,即没有异常抛出也没有说启动成功,可以在web或service下的resoures目录下添加log4j.properties

  9.访问web工程的controller即可。

二.debug启动工程出现找不到源码问题的解决

  解决办法如下:

   》选择Debug Configurations

 

   》选择对应工程类型,再挑选工程即可

三.设置发布服务的超时时间

<dubbo:service interface="cn.e3mall.service.ItemService" ref="itemServiceImpl" timeout="10000"/>

四.开启监控中心

  》监控中心:是dubbo提供的jar(较早版本是web工程),用于监听消费者和提高者之间的交互信息

  》开启操作参考:https://blog.csdn.net/xvshj/article/details/101081590?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

五.pageHelper的使用

  》pageHelper是第三方提供的一个mabatis分页插件。由于我们是经常使用逆向工程里的statement,可官方提供的逆向工程代码并不支持分页的操作,这让我们很头疼,若想提取分页数据的话,又得自己手动去写sql语句了,想想很难受。所以呢有人就写了这个分页插件来解决我们面临的困境,实际这个插件本质是拦截器,在sql语句执行前,将它篡改成可以进行分页的sql罢了。下面讲如何使用:

  1.在项目中引入对pageHelper的依赖

  2.在sqlMapConfig.xml配置该拦截器,并指定数据库类型(pageHelper插件只支持一些数据库,但sqlServer是用不了的)

    <plugins>
        <!-- 配置mabatis的拦截器 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 设置数据库的类型 -->
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>

  3.配置完毕就书写代码测试了,测试的基本代码如下:

package cn.e3mall.service.impl;

import java.util.List;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import cn.e3mall.mapper.TbItemMapper;
import cn.e3mall.pojo.TbItem;
import cn.e3mall.pojo.TbItemExample;

public class TestPageHelper {

    @Test
    public void testPageHelper() {
        /**
         *     1.获取spring ioc
         *     2.获取mapper代理对象(指定对哪个mapper下的全部查询方法进行分页操作)
         *     3.在执行sql之前,设置分页参数信息
         *     4.执行sql,得到已分页操作的数据
         *     5.若想得到分页数据的具体信息,可创建pageInfo对象将分页数据作为参数传入
         *     
         */
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
        
        TbItemMapper itemMapper = ac.getBean(TbItemMapper.class);
        
        //设置当前页码和每页记录数
        PageHelper.startPage(1, 10);
        
        TbItemExample tbItemExample = new TbItemExample();
        
        List<TbItem> itemList = itemMapper.selectByExample(tbItemExample);
        
        PageInfo<TbItem> tbItemInfo = new PageInfo<>(itemList);
        
        System.out.println(tbItemInfo.getTotal());
    }
}

六.查询数据库列表警告问题

  》使用pageHelper查询数据并返回到列表时,控制台可能会出现如下的警告:

   》它的意思时找不到Page这个类,至于为什么说一下:

    其实在startPage设置分页的参数后,调用查询方法得到其实是一个page对象,这个page本质是一个list

     这就是为什么我们能把查询出来的list作为参数创建出pageInfo;那这个跟警告有啥关系呢?service层是需要把数据List返回给web层的,而web层并没有对PageHelper进行依赖,所以找不到Page这个类会有警告,不是异常的原因在于它page它的父类是arrayList,可以强制转为arrayList来使用

    解决办法也很简单:在web依赖pageHelper即可

原文地址:https://www.cnblogs.com/ibcdwx/p/13341935.html