Spring Data MongoDB文档到期时间

时间:2018-01-18 21:07:08

标签: spring mongodb spring-data

我已经建立了一个简单的文档模型(下面)和一个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)的文档到期日期?

1 个答案:

答案 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的值,而不是在注释中对其进行硬编码。