zoukankan      html  css  js  c++  java
  • 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即可

  • 相关阅读:
    克如斯卡尔 P1546
    真正的spfa
    第四课 最小生成树 要点
    关于vscode中nullptr未定义
    cmake学习笔记
    python学习笔记
    (BFS 图的遍历) 2906. kotori和迷宫
    (图论基础题) leetcode 997. Find the Town Judge
    (BFS DFS 并查集) leetcode 547. Friend Circles
    (BFS DFS 图的遍历) leetcode 841. Keys and Rooms
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/13341935.html
Copyright © 2011-2022 走看看