英文:
Is there way to record audit database in spring boot using Spring Data Envers with spring JDBCTemplate?
问题
我正在创建一个使用Spring的Web应用程序,该应用程序使用MySQL
数据库和Spring的JDBCTemplate
进行操作。问题是我想要记录存储在MySQL
数据库中的任何数据更改。我无法找到在使用JDBCTemplate时使用Spring Data Envers来记录这些更改的解决方案。
记录数据库中数据的任何更改的最佳方法是什么?或者只是在Spring应用程序中编写一个文本文件吗?
英文:
I'm creating a spring web application that uses the MySQL
database with spring JDBCTemplate
. The problem is I want to record any changes in data that store in the MySQL
database. I couldn't find any solution for Spring Data Envers with JDBCTemplates to record the changes.
What is the best way to record any changes of data of database? or by simply writing a text file on the spring app?
答案1
得分: 1
Envers 是 Spring Data Envers 构建的基础,它是 Hibernate 的附加组件,并利用其变更检测机制来触发将修订写入数据库。
JdbcTemplate
则不具备这些功能,它只是通过抽象化异常处理或遍历查询的 ResultSet
等重复任务,简化了执行 SQL 语句的过程。JdbcTemplate
不知道它执行的语句实际上在做什么。
因此,你有几个选择:
- 在数据库上放置触发器以记录更改。
- 使用某些依赖于数据库的功能,比如 Oracle 的变更数据捕获(Change Data Capture)。
- 你可以创建一个
JdbcTemplate
的包装器,分析 SQL 语句并生成日志条目。这只在你仅需要非常有限的信息时才可行,比如执行了什么类型的语句以及影响了哪个表。 - 如果你需要更多语义信息,最好使用应用程序堆栈中更高级别的部分(如控制器或服务)来收集相关信息并将其写入数据库。可能也会使用
JdbcTemplate
。
英文:
Envers on which Spring Data Envers builds is an add on of Hibernate and uses it's change detection mechanism in order to trigger writing revisions to the database.
JdbcTemplate
doesn't have any of that, it just eases the execution of SQL statements by abstracting away repetitive tasks like exception handling or iterating over the ResultSet
of queries. JdbcTemplate
has no knowledge of what the statement it is executing is actually doing.
As so often you have a couple of options:
- put triggers on your database that record changes.
- use some database dependent feature like Oracles Change Data Capture
- You could create a wrapper of
JdbcTemplate
which analyses the SQL statement and produces a log entry. This is only feasible when you need only very limited information, like what kind of statement was executed and which table was affected. - If you need more semantic information it is probably best to use an even higher level of your application stack like the controller or service to gather the relevant information and write it to the database. Probably using the
JdbcTemplate
as well.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论