首页 文章

在spring boot中进行mongodb审计以保存createdDate,lastModifiedDate,createdBy,lastModifiedBy

提问于
浏览
2

我使用的是spring boot,因此我没有使用任何xml文件进行配置 . 我要做的是EnableMongoAuditing保存createdDate,lastModifiedDate等,同时使用MongoRepositories保存数据 .

我的模特课

@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 回答

  • 0

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

  • 1

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

    @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;
        }
    }
    

相关问题