我已经建立了一个简单的文档模型(下面)和一个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则不是。
有没有其他方法可以在Spring / Mongodb中设置不使用@Indexed(expireAfterSeconds=x)
的文档到期日期?
答案 0 :(得分:2)
而不是使用Indexed
注释来声明Spring Data Mongo将代表您创建的索引...您可以使用MongoTemplate
实例显式创建索引。
@Value("${config.file.path.of.expiry}")
long expireAfterSeconds;
...
mongoTemplate.indexOps("users").ensureIndex(
new Index().on("registeredDate", Order.ASCENDING)
.expire(expireAfterSeconds)
);
这将允许您在运行时从配置文件中获取expireAfterSeconds
的值,而不是在注释中对其进行硬编码。