Java 创建jdbc连接的动态代理以覆盖提交或回滚方法

Java 创建jdbc连接的动态代理以覆盖提交或回滚方法,java,jdbc,connection,byte-buddy,Java,Jdbc,Connection,Byte Buddy,我正在开发一个现有的应用程序,该应用程序广泛使用老式的JDBCSQL操作,即选择、更新、插入等 该应用程序有一个管理数据字段的类,带有一个脏标志,指示某些内容已更改,需要提交到数据库 当INSERT或UPDATE语句毫无例外地完成并且提交成功时,需要关闭“脏标志” 由于当前的设计和程序流的原因,这并不是完全不重要的,因此,我认为可以实现用于将更改写入数据库的连接的代理,重写提交方法,并确保在提交成功时,将标志设置为off 换句话说,我想实现一个基于java的数据库提交“回调”,这样我就可以订阅特

我正在开发一个现有的应用程序,该应用程序广泛使用老式的JDBCSQL操作,即选择、更新、插入等

该应用程序有一个管理数据字段的类,带有一个脏标志,指示某些内容已更改,需要提交到数据库

当INSERT或UPDATE语句毫无例外地完成并且提交成功时,需要关闭“脏标志”

由于当前的设计和程序流的原因,这并不是完全不重要的,因此,我认为可以实现用于将更改写入数据库的连接的代理,重写提交方法,并确保在提交成功时,将标志设置为off

换句话说,我想实现一个基于java的数据库提交“回调”,这样我就可以订阅特定连接的提交,并对这些事件采取行动

我一直在研究byte buddy作为实现这一点的一种可能方法,但在我迄今为止看到的所有示例中,都可以控制被修改类的实例化

我的情况并非如此。实现java.sql.Connection的类型的实例由jdbc驱动程序创建,通常由数据库连接池(如TomCat连接池)中使用的另一个类包装

如何截取这些对象的实例化,并动态重写提交和回滚方法

我能和巴迪一起做吗


有更好的选择吗?

正如我所读到的,我认为所有CRUD操作都有单独的方法。因此,我认为你不应该把逻辑搞完整。更简单的说法:

  • 依次从try块调用所有必需的方法
  • 在catch块(catch(Exception))中调用回滚
  • 在Finally块中,调用commit

  • 这将简化逻辑,使其更具可读性,并使代码模块化。

    正如我所读到的,我认为所有CRUD操作都有单独的方法。因此,我认为你不应该把逻辑搞完整。更简单的说法:

  • 依次从try块调用所有必需的方法
  • 在catch块(catch(Exception))中调用回滚
  • 在Finally块中,调用commit
  • 这将简化逻辑,使其更具可读性,并使代码模块化。

    您是否看过的
    AgentBuilder
    ?我想这对你有帮助。使用此生成器和Java代理,您可以使用与示例中相同的语法,根据类的定义更改类的实现。您只需要更改(重新设置)特定类。

    您是否查看了的
    AgentBuilder
    ?我想这对你有帮助。使用此生成器和Java代理,您可以使用与示例中相同的语法,根据类的定义更改类的实现。只需更改(重新设置)特定类即可