【问题标题】:How can I do a insert a new Date with Spring Data MongoDB?如何使用 Spring Data MongoDB 插入新日期?
【发布时间】:2016-02-14 06:00:44
【问题描述】:

如何使用 Spring Data MongoDB 插入新日期?

我目前正在诉诸

User = new User();
user.setCreationDate(new Date());
mongoOperation.save(user);

解决问题,但最终结果是用户保存的是运行代码的服务器的当前时间,而不是运行数据库的服务器的当前时间。

由于此代码将在多台服务器上的多个实例中并行运行,并且服务器的时间可能略有不同,因此我想复制与执行 a 时完全相同的行为

db.users.insert({'creationDate': new ISODate()}) 

直接在 mongo shell 中。

如何使用 Sprint-Data-MongoDB 实现这一点?

【问题讨论】:

  • 为什么你们的日期不同?我的意思是你肯定需要在你的服务器上设置正确的时区和语言环境......但即使那样,日期 value 应该是相同的,它只会根据 UI 在 UI 中以不同的方式显示格式化时选择的语言环境
  • 嘿@Zilvinas,感谢您的加入。日期可能不同,因为它们是完全不同的日期计算...一个由 mongoDb 引擎提供,另一个是由java提供。我确信服务器配置得尽可能好(除了部署管道,我无法访问它们,它们仅由 infra/dev-ops 处理),但由于我以 ms 精度存储,因此可以存在差异...不过,即使 java 的 new Date() 足够好,我仍然想知道该怎么做 :)
  • 如果您的服务器开始时设置了区域设置和服务器时间,则考虑到时区信息,不同服务器上的原子日期和时间应该相同。如果位于 GMT+2:00 的服务器 1 显示时间 2 PM,则位于 GMT-3:00 的服务器 2 应显示 9 AM,但原子时间值应相同。这意味着您在向用户打印日期/时间时使用 locale 值,因此如果您在输出时间时在两台服务器上使用相同的语言环境,它应该显示完全相同的值。

标签: java spring mongodb spring-data spring-data-mongodb


【解决方案1】:

您可以通过使用 spring-data 审计功能始终如一地实现这一目标

为了启用审计,我们需要在 Spring 配置中添加 标签。

审计让你以声明方式告诉 Spring 存储:

  • 文档创建日期:@CreatedDate
  • 上次更新文档的日期:@LastModifiedDate
  • 创建文档的用户:@CreatedBy
  • 最近一次更新的用户:@LastModifiedBy
  • 当前文档版本:@Version

对于我们的用例,如果我们结合 javax.persistence jar 日期样式和 mongodb 审计,我们总是通过使用以下声明获得 new ISODate()

@Temporal(TemporalType.TIMESTAMP) 
@DateTimeFormat(style = "M-") 
@CreatedDate
private Date createdDate; 

这样你就可以使用 spring-data-mongodb 创建新的 Date

【讨论】:

    【解决方案2】:
    @Column(updatable = false)
        @CreationTimestamp
        private LocalDateTime createdAt;
    

    我们提供@CreatedDate 来捕获创建实体的用户,并提供@LastModifiedDate 来捕获更改发生的时间。

    Spring Data JPA 文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#auditing.annotations

    【讨论】:

    • 您可能需要添加更多详细信息来解释基本原理,尽管已选择其他答案作为解决方案。
    • 谢谢,我会的。 @azbarcea
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2016-12-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    相关资源
    最近更新 更多