代码之家  ›  专栏  ›  技术社区  ›  DraegerMTN

Spring数据MongoDB文档到期时间

  •  3
  • DraegerMTN  · 技术社区  · 7 年前

    我已经建立了一个简单的文档模型(如下)和一个Spring数据存储库

    @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 回复  |  直到 7 年前
        1
  •  4
  •   glytching    7 年前

    而不是使用 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 而不是在注释中对其进行硬编码。