学习淘淘商城第四十三课(实现从数据库导入数据到索引库)
来源:互联网 发布:unsw moodle 网络 编辑:程序博客网 时间:2024/05/24 02:17
上节课我们一起学习了Sevice层代码的编写,这节我们一起学习表现层代码的编写,从而实现导入功能。
调用导入数据功能的表现层我们应该放到后台管理系统taotao-manager-web工程下,既然服务已经发布过了,我们现在需要引用服务,引用配置:<dubbo:reference interface="com.taotao.search.service.SearchItemService" id="searchItemService" />如下图所示。
我们知道,在默认的后台管理页面当中是没有导入数据到索引库页面的,这就需要我们自己创建这么一个管理页面。不过首先我们需要在后台导航页添加一个导航,如下图所示。当点击"导入索引库"的时候会去找import-index.jsp这个页面。
下面我们便去新建import-index.jsp这么一个页面,如下图所示。
页面代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><div> <a class="easyui-linkbutton" onclick="importIndex()">导入数据到索引库</a></div><script type="text/javascript"> function importIndex(){ $.post("/index/import",null,function(data){if(data.status == 200){$.messager.alert('提示','导入数据到索引库成功!');}else{$.messager.alert('提示','导入数据到索引库失败!');}}); }</script>
写好了页面,下面我们便写一下Controller,由于taotao-manager-web工程依赖taotao-search-interface,因此需要添加对该工程的依赖,如下图所示。
下面我们在taotao-manager-web工程新建一个Controller,专门处理导入数据到索引库(下图的上半部分是我用来说明请求的来源的,下半部分才是Controller代码)
代码如下:
package com.taotao.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.taotao.common.pojo.TaotaoResult;import com.taotao.search.service.SearchItemService;@Controllerpublic class IndexManagerController { @Autowiredprivate SearchItemService searchItemService;@RequestMapping("/index/import")@ResponseBodypublic TaotaoResult importIndex(){TaotaoResult result = searchItemService.importItemsToIndex();return result;}}
这样,我们的代码便写完了,接下来我们要做的便是启动各个工程了。
由于在taotao-common工程中添加了一个pojo,因此taotao-common工程需要重新打包,打包方式是工程上右键------>Run As------>Maven install。
taotao-search聚合工程是个新工程,需要打包到本地maven仓库,打包方式同上。
在启动工程前,我们需要打开zookeeper服务器。
先启动taotao-manager工程,接着启动taotao-content工程,接着启动taotao-search工程,由于taotao-search工程还没有配置tomcat插件启动,因此需要先配置一下,方法是在工程上右键------>Run As----->Maven build,会看到如下图所示的对话框,在Goals一栏输入"clean tomcat7:run"。然后点击"Apply",之后点击"Run"启动该工程。
启动完taotao-search工程之后,我们再启动taotao-manager-web工程,启动完之后,我们看下后台管理页面,可以看到有导入索引库页面,如下图所示。
我们点击上图的"导入数据到索引库,会看到如下所示错误信息。
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.taotao.search.mapper.SearchItemMapper.getSearchItemListat org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:189)at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:43)at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58)at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51)at com.sun.proxy.$Proxy32.getSearchItemList(Unknown Source)at com.taotao.search.service.impl.SearchItemServiceImpl.importItemsToIndex(SearchItemServiceImpl.java:28)at com.alibaba.dubbo.common.bytecode.Wrapper1.invokeMethod(Wrapper1.java)at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:60)at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)at com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:112)at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)at com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)at com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38)at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:108)at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84)at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170)at com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)at com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)
是什么造成这个错误的呢?这是由于默认情况下mybatis所对应的mapper.xml文件是不被加载的,如下图所示,我们到taotao-search-service的mapper目录下,发现只有.class文件没有SearchItemMapper.xml文件。没有xml文件,当然执行不成功了。
那么解决方法是什么呢?我们到taotao-search-service工程的pom.xml文件中去简单做下配置即可,如下图所示,添加build配置,在<resources></resources>当中需要添加两个<resource>,因为第一个<resource>只是把src/main/java目录包含进去了,这样就会导致src/main/resources目录被忽略掉了,而在我们的taotao-search-service工程中src/main/resources目录下是有很多配置文件的,不能忽略,因此需要把src/main/resources目录也包含进去,这也就是第二个<resource>所要做的事情。
添加的配置如下:
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> </build>
既然修改了taotao-search-service工程,我们便要重启该服务,重启后,我们再到如下图所示的目录下查看SearchItemMapper.xml文件是否已经生成,发现已经生成了。
下面我们再点击"导入数据到索引库"按钮,等待一会儿,就会看到如下图所示的提示信息。说明导入成功。
我们再到solr网页去查看导入的数据,发现确实查询到了,说明我们的导入功能成功了。
- 学习淘淘商城第四十三课(实现从数据库导入数据到索引库)
- 学习淘淘商城第四十课(导入商品数据到索引库-dao层)
- 学习淘淘商城第四十二课(导入商品数据-service层)
- 学习淘淘商城第四十四课(首页跳转到搜索页面及搜索实现分析)
- 学习淘淘商城第四十一课(使用solrj来测试索引库)
- 学习淘淘商城第四十五课(使用SolrJ查询索引库)
- 淘淘商城系列——导入商品数据到索引库——dao层
- 淘淘商城系列——导入商品数据到索引库——Service层
- 淘淘商城系列——导入商品数据到索引库
- 淘淘商城系列(九)solr导入索引库
- 学习淘淘商城第七十三课(Nginx基础)
- 学习淘淘商城第九十三课(用户登录的实现)
- 学习淘淘商城第六十二课(添加商品同步到索引库以及消息机制测试)
- 学习淘淘商城第四十九课(搜索功能测试)
- 学习淘淘商城第四十六课(搜索服务Dao实现)
- 学习淘淘商城第四十七课(搜索功能Service实现)
- 学习淘淘商城第四十八课(商品搜索功能Controller实现)
- 学习淘淘商城第二十课(实现图片上传功能)
- c#写出的spfa
- CCF NOI1089 高精度运算
- Day 3 网络流
- Spring和MyBatis环境整合
- C++结构体和共用体
- 学习淘淘商城第四十三课(实现从数据库导入数据到索引库)
- Docker Makefile文件结构
- 日历程序
- hibernate里面的一对多和多对一映射
- 卷积
- tomcat结合nginx实现多个tomcat同时运行,tomcat负载均衡
- c++ 字符串分割函数
- Java中的值传递与引用传递详解
- ((n&(n-1))==0)的含义