11.5.5 应用启动时创建索引

还有一项十分重要的工作没有完成,那就是创建索引,这项工作通常是在应用程序启动时完成。在Java Web项目中,如果在web.xml中给Servlet配置了load-on-startup元素,Web应用程序启动时就会加载该Servlet并调用它的init()方法,因此,可以将创建索引的代码放在CoreServlet类的init()方法中,代码如下:

  1. @Override
  2. public void init() throws ServletException {
  3. File indexDir = new File(ChatService.getIndexDir());
  4. // 如果索引目录不存在则创建索引
  5. if (!indexDir.exists())
  6. ChatService.createIndex();
  7. }

为了防止重复创建索引,需要判断索引文件目录是否存在,只有不存在时才创建索引。另外,当问答知识表的数据发生变化(新增、修改或删除)时,还需要同步更新索引,这部分工作就留给读者自己去完成。

增加load-on-startup元素后,CoreServlet的完整配置如下:

  1. <servlet>
  2. <servlet-name>coreServlet</servlet-name>
  3. <servlet-class>
  4. org.liufeng.course.servlet.CoreServlet
  5. </servlet-class>
  6. <load-on-startup>0</load-on-startup>
  7. </servlet>
  8.  
  9. <!-- /coreServlet用于指定该Servlet的访问路径 -->
  10. <servlet-mapping>
  11. <servlet-name>coreServlet</servlet-name>
  12. <url-pattern>/coreServlet</url-pattern>
  13. </servlet-mapping>

load-on-startup元素的值表示Servlet被载入的顺序,该值越小,Servlet的优先级越高,Web应用程序启动时就会最先被加载。如果没有对Servlet指定load-on-startup,Servlet会在首次被访问时加载。