如何使用spring动态跟踪数据库变化?

2024-02-26

我在用spring,spring-data,spring-cronjobs and java-mail。我需要立即扫描表中的更改my-sql数据库并向管理员发送有关更改的邮件。

为了实现这一目标,我所做的就是运行一个 cronjob 来扫描表中的所有更改,但这是一个繁重的过程,因为该表与货币交易相关,并且消耗大量资源,导致应用程序变得太慢。

那么,是否有更好的过程可以跟踪数据库中的当前更改。例如,如果有任何方法可以在春季设置观察者以触发数据库更改过程,那将会很有帮助。

以下是我正在扫描的表实体的示例。

/** Import statements **/

@Entity
public class UserWalletTransaction {

    @Id
    @GeneratedValue
    private Long Id;
    private String toAccount;
    @ManyToOne(fetch = FetchType.LAZY)
    User user;
    @ManyToOne(fetch = FetchType.LAZY)
    Wallet wallet;
    private String senderOrMobile;
    private String benificiaryName;
    private String beniMobile;
    private Double transferAmount;
    private Double sTax;
    private Double charge;
    private Double netAmount;
    private String apiTId;
    private String apiComment;
    private String agentId;
    private Double apiSTax;
    private Double apiCharge;
    private Double apiNetAmount;
    private Double apiBalanceAmount;
    private String transactionMode;
    private String bankName;
    private String userTrackId;
    private String referenceNumber;
    private String operatorDescription;
    private String mobileNumber;
    private String rechargeDateTime;
    private String operatorTransactionId;
    private String hermesPnr;
    private String utId;
    private String status;
    private Double previousAmount;
    private Double balanceAmount;
    private Double amountTransacted;
    private String transactionType;
    private boolean isRaised;
    private boolean isRefunded;
    @Column(name = "created_by")
    private String createdBy;
    @Column(name = "created_date")
    private Date createdDate;
    @Column(name = "updated_by")
    private String updatedBy;
    @Column(name = "updated_date")
    private Date updatedDate;
    private String operationPerformed;
    @OneToOne
    private UserWalletTransaction relationalTransaction;
    private String errorComments;
    @OneToOne
    private User debitUser;
    @OneToOne
    private User creditUser;
    @OneToOne
    private ServiceProvider serviceProvider;
    @OneToOne   
    private RefundRequest refundRequests;

    ..... Getters and setters......
}

以下是我用来在扫描数据库后触发邮件的示例 cron 作业。

/** Import statements **/
@Component
@EnableScheduling
public class ValidateCron {
    @Autowired
    RechargeService rechargeService;
     @Scheduled(fixedDelay = 2)
     public void demoServiceMethod() {
        // Perform tasks related to scan and track the number of records added //after the previous scan. Fire a mail if any change in the database is found. 
     }
}

请分享我可以提高此功能性能的任何方法。提前致谢。


Hibernate 有一个拦截器机制,允许您在发生数据库事件时在特定时间收到通知。

此类事件是会话的创建/删除/刷新。当您访问受给定事件影响的对象时,您可以在修改给定类的给定对象(您可以轻松地将其映射到模式中的表)时触发进程。

javadoc 可以在这里找到:https://docs.jboss.org/hibernate/orm/4.0/manual/en-US/html/events.html https://docs.jboss.org/hibernate/orm/4.0/manual/en-US/html/events.html

除了您的用例之外,我曾经在基于 Oracle 的分区模式中使用过拦截器。这个想法是使用技术日期对我们的一些表进行分区,挑战是给定树中的所有对象具有相同的“分区日期”(如果我们在插入时使用 SYSDATE,没有什么可以阻止对象树的一部分在第 N 天有一个分区日期,而树的其余部分在第 N+1 天......这在其他一些级别上是令人担忧的)。然后,使用拦截器在插入时沿着对象树传播相同的日期。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用spring动态跟踪数据库变化? 的相关文章

随机推荐

  • 数据库 - 为什么不区分大小写?

    我看到一两个线程在全球范围内讨论区分大小写 但我的问题更具体 例如 我理解对文本值不区分大小写的搜索的兴趣 但为什么我们要使用不区分大小写的数据库名称 表和列呢 难道不会导致错误吗 使用数据库的脚本语言都是区分大小写的 因此 例如 如果我们
  • MS Graph Java SDK:如何将大文件上传到 OneDrive?

    我正在尝试从 Java 应用程序将文件上传到 OneDrive 但我不了解流程 也没有在 SKD 中看到任何用于文件上传的文档或方法 我发现的唯一流程是 driveClient me drive root createUploadSessi
  • 如何获取 DShellFolderViewEvents 的方法签名

    我试图沉沦DShellFolderViewEvents使用 ATL 我能够成功订阅的唯一方法是DISPID SELECTIONCHANGED 标题中似乎列出了许多其他事件shdispid h 但我无法让他们开火 不确定我做错了什么 可能与
  • Blogger Javascript 在帖子 > 500 上出现 JSON 错误

    我想向我的博主展示随机帖子 我从谷歌搜索得到了一个 javascript 并尝试了它 但是随机帖子的数量不正确 应该是 10 但有时是 4 有时是 2 等等 我尝试检查发生了什么 发现 json feed entry 500 抛出错误 这是
  • 为什么Restlet无法注册JSON转换器?

    我在这里束手无策 似乎从来没有遇到过这个问题 我发现设置快速 HelloWorld 应用程序以确保 Restlet 2 0 启动并运行相对容易 然而 我面临着一个我以前从未遇到过的奇怪异常 我的类路径和 WEB INF lib 文件夹中都有
  • g++:错误:libgomp.spec:没有这样的文件或目录

    我使用 g GCC 4 7 2 在 Windows 7 64 位版本上 下载自http nuwen net mingw html http nuwen net mingw html 我尝试使用 fopenmp 标志并收到错误 g 错误 li
  • Swagger/Swashbuckle 列出可接受的值?

    我已在 Web API 应用程序上成功实现了 Swashbuckle Swagger 但对输出并不满意 我的 Web api 方法之一 企业事件日志记录工具 接受复杂对象值的 JSON 对象 问题在于 当存在可以使用的可接受值的选定列表时
  • 在 Windows 上监听“使用我的 Java 应用程序打开文件”事件

    标题很混乱 但不知道如何用几句话来解释 我有一个读取 example 文件的 java 应用程序 我还添加了一个文件关联 感谢install4j因此 当用户双击任何扩展名为 example 的文件时 我的应用程序就会启动 看来 instal
  • 在 Python 脚本中以 Windows 上的不同用户(非管理员)身份运行程序

    使用以下代码 class ImpersonateWin32Sec object def init self domain username password self username username self password pass
  • 在 Vaadin 7 Web 应用程序中获取用户的 IP 地址和其他客户端信息

    In Vaadin https www Vaadin com 7 如何获得IP地址 http en wikipedia org wiki IP address用户的计算机 设备 我可以获得有关客户的其他信息吗 Vaadin WebBrows
  • Laravel - AppServiceProvider 未被调用

    我尝试在 Laravel AppServiceProvider 中绑定一些服务 但服务没有绑定 我认为 AppServiceProvider 甚至没有被调用 事实上 我做了一个新的并且有效 所以我的问题是 我做错了什么吗 或者 AppSer
  • 不带 FROM 子句的 SELECT

    我正在为我的 MS Access 数据库编写一条 SQL 语句 目的是对 3 个不同查询的值进行计数 所以我尝试了以下方法 SELECT query1 query2 query3 AS Qtd 每个查询从聚合函数计数中返回一个唯一值 即qu
  • 将小提琴图与箱线图相结合

    我有一个非常简单的数据集 2 组 每组 n 15 使用 ggplot2 我可以轻松绘制两组的小提琴图或箱线图 但是 我想绘制小提琴图 但填充阴影对应于我的数据的 3 个四分位数 有一个用SAS做的例子here http blogs sas
  • 使用 okHttp3 上传动态数量的文件

    如何管理动态数量的文件的上传OkHttp http square github io okhttp v3 我已经用旧版本的 OkHttp 实现了compile com squareup okhttp okhttp 2 6 0 类 Form
  • C - 为什么在进行指针算术时转换为 uintptr_t vs char*

    我正在开发一个程序 我必须修改目标进程内存 读取它 到目前为止 我使用 void 来存储地址 如果需要更改它们 请将它们转换为 char 一般添加偏移量或修改 我听说过 stdint h 中定义的该类型 但我没有看到使用它进行指针算术与 c
  • 类中的java构造函数不能应用于给定类型

    我有 2 个子类 员工 学生 他们属于超类 Person 这是我的老师给出的代码 任务 public class Person private String name private int yearOfBirth Create a per
  • 我可以用 git 拆分已经拆分的块吗?

    I ve recently discovered git s patch option to the add command and I must say it really is a fantastic feature I also di
  • 具有变化对象的 Java instanceof

    我需要一个方法 我可以传递一个参数 我假设该参数是一个类 但不确定 并且在该方法中 instanceof 将用于检查 x 是否是传递的类的实例 我该怎么做 我尝试了一些方法 但没有成功 这个怎么样 public boolean checke
  • 超立方体错误:警告。分辨率 0 dpi 无效。使用 70 代替

    Error was reported when running tesseract on a image image attached tesseract rsa out jpg stdout Warning Invalid resolut
  • 如何使用spring动态跟踪数据库变化?

    我在用spring spring data spring cronjobs and java mail 我需要立即扫描表中的更改my sql数据库并向管理员发送有关更改的邮件 为了实现这一目标 我所做的就是运行一个 cronjob 来扫描表