Morphia 1.6迁移至2.4:如何通过配置文件配置ensureIndexes?
Morphia 2.4 配置自动创建索引(替代手动
ensureIndexes()) 警告原因
Morphia 2.x 版本开始,官方推荐通过配置而非手动调用ensureIndexes()来启用索引自动创建,直接调用会触发Mapper#map is configured in the config file and should not be called directly警告,因为手动调用会重复执行实体映射逻辑。
具体配置方法
1. 配置文件方式(适用于Spring/基于properties的项目)
在项目的配置文件(如application.properties或morphia.properties)中添加以下配置:
- 启用自动索引创建:
morphia.ensure-indexes=true - 指定需要扫描映射的实体包(必填,否则Morphia无法找到要创建索引的实体):
多个包用逗号分隔:morphia.map-packages=com.yourproject.entitymorphia.map-packages=com.yourproject.entity,com.yourproject.model
配置完成后,Morphia初始化时会自动扫描指定包下的实体,在应用启动阶段完成索引创建,无需再手动调用ensureIndexes()。
2. 纯Java代码配置(非Spring环境)
通过Morphia的构建器直接配置自动索引创建:
import dev.morphia.Morphia; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; public class MorphiaSetup { public static void main(String[] args) { MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017"); Morphia morphia = Morphia.create(config -> { // 配置要映射的实体包 config.mapPackage("com.yourproject.entity"); // 启用启动时自动创建索引 config.setEnsureIndexes(true); }); // 创建Datastore时自动执行索引创建 morphia.createDatastore(mongoClient, "your_database_name"); } }
注意事项
- 移除代码中所有手动调用
datastore.ensureIndexes()的逻辑,否则仍会触发警告 - 确保实体包路径配置正确,遗漏的实体不会被创建索引
- 若需更精细控制索引创建时机,可配置
morphia.index-creation=STARTUP(配置文件)或对应代码参数,指定在应用启动时执行索引创建
内容的提问来源于stack exchange,提问作者Suzuki Yuu
相关产品推荐
相关产品推荐

