我目前正在为我的SpringBoot应用程序实现一个基于数据库的日志记录器。由于在短时间内可能会有数百个日志,我正在寻找一种方法来存储特定数量的日志之前,他们被保存在数据库中。我试着重写一个自定义仓库的保存()方法,就像其他文章中提到的那样,但我最终遇到了bean错误,它根本没有做它应该做的事情。我也试着直接在我的Logger中实现它,但由于PrimaryKey ID只在使用Repository.save()方法后设置,所以我的Logs在之后混淆了。
kzipqqlq1#
也许你可以用JPA callbacks for the different lifecycle events(PrePersist, PostPersist, etc...)假设您已经实现了用于管理图书的实体和存储库,那么您可以定义一个利用上述事件的服务。您的实体:
(PrePersist, PostPersist, etc...)
@Entity @EntityListeners(BookLoggingService.class) class Book { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long id; private String title; private String isbn; public Book() {} public Book(String title, String isbn) { this.title = title; this.isbn = isbn; } public String getTitle() { return title; } public String getIsbn() { return isbn; } @Override public String toString() { return "Book [id=" + id + ", title=" + title + ", isbn=" + isbn + "]"; } }
您的存储库:
interface BookRepository extends CrudRepository<Book, Long> { }
您的日志记录逻辑:
class BookLoggingService { private static final Log log = LogFactory.getLog(BookLoggingService.class); @PrePersist void actOnPrePersist(Book book) { // implement your logging log.info("on pre persist of book: " + book); } @PostPersist void actOnPostPersist(Book book) { // implement your logging logic log.info("the after persist: " + book.toString()); } @PreRemove void actOnPreRemove(Book book) { // implement your logging logic log.info("the before removed: " + book.toString()); } @PostRemove void actOnPostRemove(Book book) { // implement your logging logic log.info("the after removed: " + book.toString()); }
}然后你会看到这样的东西:
1条答案
按热度按时间kzipqqlq1#
也许你可以用JPA callbacks for the different lifecycle events
(PrePersist, PostPersist, etc...)
假设您已经实现了用于管理图书的实体和存储库,那么您可以定义一个利用上述事件的服务。
您的实体:
您的存储库:
您的日志记录逻辑:
}
然后你会看到这样的东西: