• 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即可

  • 相关阅读:
    owncloud7.0.2.1升级8.0.3
    iptables删除规则
    ESXi Install OpenWRT
    Eclipse连接VirtualBox中的Android x86
    win7、linux安装使用pip、mitmproxy
    linux php bom
    ios项目上传svn丢失*.a文件
    升级owncloud到7.0.2
    phpinfo有mysqlnd没有mysql
    Cacti监控Centos抓包unreachable
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/13341935.html
Copyright © 2020-2023  润新知