Search code examples
javamongodbreactiveauditspring-data-r2dbc

Auditing (@CreatedDate) does not work for WebFlux Spring Boot with reactive MongoDB


Does WebFlux Spring Boot with reactive MongoDB supports Auditing? I tried to use @CreatedDate and it did not work for me. Here is my configuration:

@Configuration
@EnableReactiveMongoRepositories
@EnableMongoAuditing
@AllArgsConstructor
public class ReactiveMongoConfiguration extends AbstractReactiveMongoConfiguration {
    ...
}

Here is my document class

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.domain.Persistable;
import org.springframework.data.mongodb.core.mapping.Document;
...    
import java.util.Date;

@Document
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Message implements Persistable<String> {
  @Id private String id;

  private String text;

  @CreatedDate
  private Date createdDate;

  @Override
  public boolean isNew() {
    return createdDate == null;
  }

Here is Message repository

@Repository
public interface IMessageRepository extends ReactiveMongoRepository<Message, String> {}

When I save message messageRepository.save(message) I always have createdDate=null

Do I miss something or Auditing does not work with reactive MongoDB?


Solution

  • I resolved the issue by using @EnableReactiveMongoAuditing, not @EnableMongoAuditing as I initially did. Apparently the reactive annotation should be used with ReactiveMongoRepositories. So the correct configuration is the following:

    @Configuration
    @EnableReactiveMongoRepositories
    @EnableReactiveMongoAuditing
    @AllArgsConstructor
    public class ReactiveMongoConfiguration extends AbstractReactiveMongoConfiguration {
    ...
    } 
    

    So after saving a message the corresponding createdDate is added automatically:

    { "_id" : ObjectId("628a01d77f74d46c62a5bb36"), "text" : "Hello", "createdDate" : ISODate("2022-05-22T09:26:47.280Z"), "_class" : "com.mgtest.app.model.dao.Message" }