定期扫描数据库表以查找新行

时间:2018-05-18 09:15:32

标签: java mysql

我有一个Java应用程序,它从表A中读取行并将这些行写入表B.

现在,我的另一个要求是定期检查表A(每隔x分钟)检查新插入的行并将它们移动到表B.如果有帮助,表A有created_atupdated_at TIMESTAMP字段

有没有办法可以根据TIMESTAMP值检查某个时间间隔内新插入的行,将这些新行添加到List并重新使用我已有的Java方法写入表B?

我是一名Java / MySQL菜鸟,非常感谢任何可以帮助我入门的建议/建议。我正在使用MariaDB数据库。

1 个答案:

答案 0 :(得分:0)

方法1:您可以通过添加指示状态为活动或已处理的其他列来实现此目的。从表A中选取行并发送到表B后,您可以将列的状态更新为已处理。这可以使用简单的更新SQL查询来完成。对于状态为打开的任何记录,您可以在每X分钟后继续检查表格A,并使用简单的选择查询,例如CREATE TRIGGER trigger_UpdateTableB ON TableA FOR INSERT AS BEGIN INSERT INTO TableB ( primary_column, column_tableA ) SELECT primary_column, column_tableB, FROM INSERTED END

方法2:您可以使用触发器,只要在表A中插入记录,就将记录发送到表B

<route>
<!--To set up a route that generates an event every 60 seconds -->
<from uri="timer://foo?fixedRate=true&period=60000" />  
      <to uri="sqlComponent:{{sql.selectTableA}}" />
            <to uri="sqlComponent:{{sql.updateStatus}}" />
               <to uri="sqlComponent:{{sql.InsertTableB}}" />
</route>

方法3:您也可以使用Apache Camel轻松实现类似的功能。

@DeleteMapping(path ={"logical/{id}"})
public User deleteLogical(@PathVariable("id") int id) {
    return userService.deleteLogical(id, user);
}

附录 - https://www.thonky.com/how-to/prevent-base-64-decode-hack阅读有关MariaDB中触发器的更多信息

https://mariadb.com/kb/en/library/trigger-overview/了解有关Apache Camel的更多信息