我已经建立了一个简单的文档模型(如下)以及一个 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/