【问题标题】:Spring Data MongoDB document expiry timeSpring Data MongoDB 文档过期时间
【发布时间】:2018-01-18 21:07:08
【问题描述】:

我已经设置了一个简单的文档模型(如下)以及一个 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) 的文档到期日期?

【问题讨论】:

    标签: spring mongodb spring-data


    【解决方案1】:

    而不是使用 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 的值,而不是将其硬编码在注释中。

    【讨论】:

    • 非常感谢,这需要在@Configuration 类中完成吗?我试试看
    • 不必在@Configuration 类中完成。任何 (a) 由 Spring 管理的类(因此可以“提供”@Value)并且 (b) 可以访问 MongoTemplate 并且 (c) 可以在开始使用要索引的集合之前调用就足够了.
    猜你喜欢
    • 2012-05-18
    • 1970-01-01
    • 2012-05-05
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    相关资源
    最近更新 更多