我已经建立了一个简单的文档模型(如下)以及一个 Spring Data 存储库

@Document(collection = "users")
public class UserDocument {

    @Id
    private String userId;

    @Indexed(expireAfterSeconds=3600)
    private LocalDateTime registeredDate;
}

这似乎工作正常,并在我将 expireAfterSeconds 设置为任何时间后删除用户文档。但是,我不想输入 3600 的值,而是想从配置 .yml 中提取该数字。添加 @Value("${config.file.path.of.expiry}") 的常用方法不起作用,因为 @Indexed 要求该值是运行时常量,而 @Value 不是。

有没有其他方法可以在不使用 @Indexed(expireAfterSeconds=x) 的 Spring/Mongodb 中设置文档到期日期?

最佳答案

您可以使用 Indexed 实例显式创建索引,而不是使用 MongoTemplate 注释来声明 Spring Data Mongo 将代表您创建的索引。

@Value("${config.file.path.of.expiry}")
long expireAfterSeconds;

...

mongoTemplate.indexOps("users").ensureIndex(
    new Index().on("registeredDate", Order.ASCENDING)
        .expire(expireAfterSeconds)
);

这将允许您在运行时从配置文件中获取 expireAfterSeconds 的值,而不是在注释中对其进行硬编码。

关于Spring Data MongoDB 文档到期时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48330305/

10-13 09:11