Solr服务配置好之后,接下来我们就要考虑一个问题了,那就是我们要把商品数据导入到索引库里面才行,否则的话,我们是没有办法实现商品搜索这个功能的,可以想见我们势必要搭建一个搜索服务工程了。
我们还是先看下淘淘商城的整体架构图,如下图所示,我们已经写完了后台管理系统、商品服务、商城门户以及内容服务,现在需要搭建的是搜索系统和搜索服务这两工程。 本文我们只来搭建搜索服务工程。
我们可参考taotao-manager工程的创建来搭建搜索服务工程,并且它是一个后台的服务层工程。这个工程里面需要很多模块,我们须把这些模块单独进行拆分,所以它应该也是一个聚合工程。
我们该如何来搭建该工程呢?很简单,按照这样的步骤即可。第一步,右键名为taotao的Working Set,然后在下拉列表选中New,接着再点击Other...,如下图所示。 第二步,这时会弹出一个窗口,在该窗口的输入框中输入maven,并选择Maven Project,然后再点击Next按钮。 第三步,这时会弹出一个如下窗口,在该窗口中勾选Create a simple project复选框,如果你不打上这个勾,那么它会让你选择一个骨架,但骨架里面是没有pom这个模板的。然后再点击Next按钮。 第四步,出现如下窗口,在该窗口中定义maven工程的坐标,如下图所示。 第五步,点击Finish按钮,taotao-search工程即可创建完毕。
taotao-search工程创建成功之后,我们接下来就要配置该工程的pom文件了,主要是添加对taotao-common工程的依赖。另外,在启动工程时,我们最好启动聚合工程,因此我们还需要在聚合工程中配置tomcat7插件,由于8080、8081、8082以及8083端口都已经被占用了,于是我们这里便使用8083端口,如下所示。
<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> <parent> <groupId>com.taotao</groupId> <artifactId>taotao-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.taotao</groupId> <artifactId>taotao-search</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <!-- 依赖taotao-common --> <dependencies> <dependency> <groupId>com.taotao</groupId> <artifactId>taotao-common</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <!-- 配置tomcat7插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port>8084</port> <path>/</path> </configuration> </plugin> </plugins> </build> </project>现在我们来搭建taotao-search-interface模块。你可以按照如下图所示的步骤来搭建该模块。 这时,会弹出如下窗口,在该窗口中勾选Create a simple project前面的框框,并在Module Name一栏中输入模块的名称,例如taotao-search-interface,然后点击Next按钮。 接着在弹出的窗口中选择该模块的打包方式,我们使用默认的jar即可,最后点击Finish按钮即可成功创建taotao-search-interface模块。 taotao-search-interface模块创建成功之后,我们接下来就要配置该工程的pom文件了。由于我们的搜索服务也有可能用到pojo,因此在该pom文件中主要添加对taotao-manager-pojo的依赖,如下所示。
<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> <parent> <groupId>com.taotao</groupId> <artifactId>taotao-search</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>taotao-search-interface</artifactId> <dependencies> <dependency> <groupId>com.taotao</groupId> <artifactId>taotao-manager-pojo</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>搭建taotao-search-service模块的步骤基本上同上,只是打包方式换成war了,如下图所示。 taotao-search-service模块创建成功之后,我们接下来就要配置该工程的pom文件了,主要是添加对taotao-search-interface、Spring以及Dubbo的依赖,如下所示。
<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> <parent> <groupId>com.taotao</groupId> <artifactId>taotao-search</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>taotao-search-service</artifactId> <packaging>war</packaging> <dependencies> <!-- 依赖taotao-search-interface --> <dependency> <groupId>com.taotao</groupId> <artifactId>taotao-search-interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <!-- 与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> <!-- Zookeeper的客户端,你要连接Zookeeper,需要把以下两个jar包加进来 --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> </dependency> </dependencies> <build> <plugins> <!-- 配置打包时跳过测试(一般打包的时候,会使用Maven install命令,如果你写了一些测试类, 它会执行这个测试类的,但是我们不希望它们执行,所以就需要有这样一个插件) --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration> </plugin> </plugins> </build> </project>至于dao和pojo这两个模块,我们不用在taotao-search工程中再新建一遍了,因为我们在taotao-manager工程当中便创建好了,我们只需要引用这两个模块就可以了。
我们把taotao-manager-service工程的src/main/resources目录下的mybatis、properties以及spring这三个目录粘贴复制到taotao-search-service工程的src/main/resources目录中,其中SqlMapConfig.xml文件不用动,如下图所示。 properties目录下的db.properties配置文件也不用修改,如下图所示。 接下来我们再看下spring目录下的文件,首先看下applicationContext-dao.xml配置文件,这个配置文件用来操作数据库的,我们需要在该配置文件中做一点点改动,如下图所示。 为了大家方便复制,现把该文件的内容黏贴出来,如下所示。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd"> <!-- 加载db.properties配置文件 --> <context:property-placeholder location="classpath:properties/*.properties" /> <!-- 数据库连接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="driverClassName" value="${jdbc.driver}" /> <property name="maxActive" value="10" /> <property name="minIdle" value="5" /> </bean> <!-- 让Spring管理SqlSessionFactory(使用的是MyBatis和Spring整合包中的) --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 数据库连接池 --> <property name="dataSource" ref="dataSource" /> <!-- 加载MyBatis的全局配置文件 --> <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.taotao.search.mapper" /> </bean> </beans>相应地,我们还要到taotao-search-service工程的src/main/java目录下新建一个com.taotao.search.mapper包,如下图所示。 然后我们来看下spring目录下的第二个文件,即applicationContext-service.xml。我们应把包扫描器扫描的包修改为com.taotao.search.service,而且还应将对外发布Dubbo服务的端口改为20882,由于还没写服务接口,所以我们先把拷过来的暴露的服务接口注释掉(留个模板就行),最后还要将提供方应用信息名称改为taotao-search。 为了大家方便复制,现把该文件的内容黏贴出来,如下所示。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd"> <context:component-scan base-package="com.taotao.search.service"></context:component-scan> <!-- 使用Dubbo发布服务 --> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="taotao-search" /> <dubbo:registry protocol="zookeeper" address="192.168.81.131:2181" /> <!-- 用dubbo协议在20882端口(端口可以随便写,但默认是20880)暴露服务 --> <dubbo:protocol name="dubbo" port="20882" /> <!-- 声明需要暴露的服务接口 --> <!-- <dubbo:service interface="com.taotao.service.TestService" ref="testServiceImpl" timeout="300000" /> --> </beans>由于上面配置的要扫描的包还没有创建,因此我们还要在taotao-search-interface工程中新建一个com.taotao.search.service包,在taotao-search-service工程中新建一个com.taotao.search.service.impl包,如下图所示。 接着我们再来看下applicationContext-transaction.xml配置文件,这个配置文件是用来配置事务的,由于搜索服务只是查询数据库,不涉及到修改数据库,且查询是用不到事务的,因此我们将这个配置文件删除掉,至于该文件删不删,全凭个人意愿。
最后,我们把taotao-manager-service工程下的WEB-INF目录及web.xml文件粘贴到taotao-search-service工程的webapp目录下,并修改web.xml文件中<display-name>标签中的内容为taotao-search-service。 至此,我们的框架就整合好了。希望大家渡过愉快的一天!