如何避免Java应用每次启动时Lucene重复执行索引构建操作
Hibernate Search 4.4.3 避免重启重索引配置方案
1 调整核心配置项
在hibernate配置文件(或persistence.xml)中添加/修改以下配置:
# 已配置的文件系统存储保持不变 hibernate.search.default.directory_provider = filesystem # 指定固定的索引存储目录,注意不要放在系统自动清理的临时目录下 hibernate.search.default.indexBase = /your/fixed/path/lucene/indexes # 核心配置:禁止Hibernate启动时自动重置表结构,该配置为create/create-drop时会强制触发索引重建 hibernate.hbm2ddl.auto = update # 4.4.3版本专属配置:仅在实体数据变更时触发索引更新,禁用启动时全量索引逻辑 hibernate.search.default.indexing_strategy = event # 禁止启动时自动重建索引元数据 hibernate.search.default.metadata_rebuild_strategy = none
2 检查启动逻辑
确认业务代码中没有启动时主动调用全量索引的逻辑,如下代码会强制触发全量索引构建,正常重启需要跳过:
// 以下为全量索引构建代码,正常重启不要执行 FullTextEntityManager ftem = Search.getFullTextEntityManager(entityManager); ftem.createIndexer().startAndWait();
可以添加索引目录存在性判断,仅首次启动或索引文件损坏时执行上述全量索引代码。
3 校验运行环境
- 确保应用进程对
indexBase配置的目录有读写权限 - 确认索引目录不会被系统清理策略、发布脚本自动删除
- 集群部署场景下每个节点使用独立的索引目录,避免多节点同时写入同一份索引文件触发损坏校验,导致自动重建
内容的提问来源于stack exchange,提问作者Michał G.
相关产品推荐
相关产品推荐

