11.5.5 应用启动时创建索引
还有一项十分重要的工作没有完成,那就是创建索引,这项工作通常是在应用程序启动时完成。在Java Web项目中,如果在web.xml中给Servlet配置了load-on-startup元素,Web应用程序启动时就会加载该Servlet并调用它的init()方法,因此,可以将创建索引的代码放在CoreServlet类的init()方法中,代码如下:
- @Override
- public void init() throws ServletException {
- File indexDir = new File(ChatService.getIndexDir());
- // 如果索引目录不存在则创建索引
- if (!indexDir.exists())
- ChatService.createIndex();
- }
为了防止重复创建索引,需要判断索引文件目录是否存在,只有不存在时才创建索引。另外,当问答知识表的数据发生变化(新增、修改或删除)时,还需要同步更新索引,这部分工作就留给读者自己去完成。
增加load-on-startup元素后,CoreServlet的完整配置如下:
- <servlet>
- <servlet-name>coreServlet</servlet-name>
- <servlet-class>
- org.liufeng.course.servlet.CoreServlet
- </servlet-class>
- <load-on-startup>0</load-on-startup>
- </servlet>
- <!-- /coreServlet用于指定该Servlet的访问路径 -->
- <servlet-mapping>
- <servlet-name>coreServlet</servlet-name>
- <url-pattern>/coreServlet</url-pattern>
- </servlet-mapping>
load-on-startup元素的值表示Servlet被载入的顺序,该值越小,Servlet的优先级越高,Web应用程序启动时就会最先被加载。如果没有对Servlet指定load-on-startup,Servlet会在首次被访问时加载。