当前位置: 首页 > 知识库问答 >
问题:

spring boot中保存createdDate、lastModifiedDate、createdBy、lastModifiedBy的mongodb审计

寇照
2023-03-14

我使用的是spring boot,因此我没有使用任何xml文件进行配置。我要做的是,在使用MongoRepositories保存数据时,启用OngOAuditing以保存createdDate、lastModifiedDate等。

我的模特课

@Component
@Document(collection = "CAPPING")
public class TemporaryCapping extends BaseEntity {

    @Field("contract_id")
    private BigInteger contractId;

    @Field("period_id")
    private BigInteger periodId;

    @Field("user_id")
    private BigInteger userId;

    @Field("amount")
    private Double amount;

    @Field("type_of_capping")
    private TypeOfCapping typeOfCapping;

    public BigInteger getContractId() {
        return contractId;
    }

    public void setContractId(BigInteger contractId) {
        this.contractId = contractId;
    }

    public BigInteger getPeriodId() {
        return periodId;
    }

    public void setPeriodId(BigInteger periodId) {
        this.periodId = periodId;
    }

    public BigInteger getUserId() {
        return userId;
    }

    public void setUserId(BigInteger userId) {
        this.userId = userId;
    }

    public Double getAmount() {
        return amount;
    }

    public void setAmount(Double amount) {
        this.amount = amount;
    }

    public TypeOfCapping getTypeOfCapping() {
        return typeOfCapping;
    }

    public void setTypeOfCapping(TypeOfCapping typeOfCapping) {
        this.typeOfCapping = typeOfCapping;
    }


}



public class BaseEntity implements Serializable{

@Id
@Indexed(unique = true)
private BigInteger id;

@CreatedDate
private DateTime createdDate;

@Field("modified_date")
private BigInteger modifiedDate;

public BigInteger getId() {
    return id;
}

public void setId(BigInteger id) {
    this.id = id;
}

public DateTime getCreatedDate() {
    return createdDate;
}

public void setCreatedDate(DateTime createdDate) {
    this.createdDate = createdDate;
}

public BigInteger getModifiedDate() {
    return modifiedDate;
}

public void setModifiedDate(BigInteger modifiedDate) {
    this.modifiedDate = modifiedDate;
}

我使用@CreateDate注释来保存createDate。我对DateTime使用了jodatime依赖项

<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.7</version>
</dependency>

Spring-data-mongoDB也添加在依赖项中。

这是我的主要应用类

 @SpringBootApplication
    @EnableMongoAuditing
   public class Application {

   public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
   }

} 

由于日期没有保存在数据库中,我在这一推进中错在哪里?此外,我知道要保存@createdBy,需要编写AuditorAware bean,但目前我只是想保存createdBy。

应该在哪里使用@EnableMongoAuditing?

共有2个答案

慕胡媚
2023-03-14

@enableMongoAudting实际上可以放置在配置中的任何位置(在@Configuration注释旁边)

松新
2023-03-14

在我的应用程序中,我通过Java代码进行配置。我以这种方式使用@EnableMongAuditing,并为ZoneDateTime创建转换器。

@Configuration
@EnableMongoAuditing
@EnableMongoRepositories(basePackages = { BASE_PACKAGE })
public class MongoConfiguration extends AbstractMongoConfiguration {

    public static final String BASE_PACKAGE = "package.with.aggregates";

    @Value("${spring.data.mongodb.uri}")
    private String mongoUri;

    @Value("${spring.data.mongodb.database}")
    private String databaseName;

    @Override
    protected String getDatabaseName() {
        return databaseName;
    }

    @Override
    public Mongo mongo() throws Exception {
        return new MongoClient(new MongoClientURI(mongoUri));
    }

    // Here you must add converters to Joda datetypes. In my solution is ZonedDateTime
    @Override
    public CustomConversions customConversions() {
        List<Converter<?, ?>> converterList = new ArrayList<>();
        converterList.add(new DateToZonedDateTimeConverter());
        converterList.add(new ZonedDateTimeToDateConverter());
        return new CustomConversions(converterList);
    }

    @Override
    protected String getMappingBasePackage() {
        return BASE_PACKAGE;
    }
}
 类似资料:
  • 我正在尝试设置(作为一个java初学者)SpringJPA审计,时间为数小时/天。。。我开始感到非常沮丧,因为我找不到问题。我真的很感谢你的帮助。 @LastModifiedBy和@LastModifiedDate注释正在工作,但@CreatedBy和@CreatedDate始终为空。 下面是sql查询调试输出:2017-06-16 16:40:39[main]DEBUG n.t.d.l.l。SL

  • 我正在使用Spring Mongo审计和@CreatedDate@CreatedBy不工作,但@LastModifiedDate和@LastModifiedBy工作正常。 我在配置类上添加了@EnableMongoAudting,并定义了AuditAware。 审核类别为: 当我保存文档时,它在createdOn和createdBy中都设置为null,但在modifiedOn和modifiedBy

  • 我正在用Spring Boot JPA编写一个应用程序,使用Postgres数据库。我有一个用户实体,我试图在保存和/或修改用户记录时获取时间戳。这不起作用。正在保存的记录的createdDate和lastModifiedDate均为“null”。 以下是Kotlin的所有相关代码: 用于添加日期字段的SQL查询如下所示: 我还有一个配置类 和我的测试课程: 更新时间: 问题似乎只发生在测试中。当

  • 我已经将一个旧的spring boot 1.5.3项目更新为spring boot 2.0.0。释放我有一个审计实体,有两个ZonedDateTime类型的字段,用@CreatedBy和@LastModifiedDate注释。 在以前的版本中,一切正常。然而,在新的更新中,在存储库中保存实体时,我会遇到一个错误,即 我检查了AnnotationAuditingMetaData,我发现与ZonedD

  • 我使用的是Spring数据JDBC。 我有一个实体,其中的字段用

  • 我正在使用Spring-Boot 2.5.0和MongoDB来持久化一些文档。这里是Github项目。 对于每个文档,我还需要自动保存一些审计信息,因此我扩展了以下类: 例如。让我们考虑类: 我遇到的问题是,当我通过JSON更新文档时,我能够更改/覆盖CreatedBy和CreatedDate字段的值。 这意味着,如果未提供字段,则结果值将保存为null,否则,它将为创建者和创建的字段保存新值。