如何判断同步完成 SymmetricDS

How to determine that the synchronization completed SymmetricDS

我需要编写代码,使用 SymmetricDS 并在按下按钮时同步两个数据库。 IE。我需要按下按钮,它显示它正在同步,然后当没有更多更改时它会显示 'Everything is ok' 让我继续操作。

除了确定一切都已同步的方法外,我已经想出了我需要做的所有事情。

SymmetricDS 引擎部署在 Tomcat 8,我的应用程序也部署在那里,我使用 JMX MBeans 连接到 SymmetricDS 以 start/stop 同步。

我发现这四个查询

String serv_outgoing = "select * from sym_outgoing_batch where node_id = '" + node_id + "' and channel_id != 'config' and status != 'OK';";
String serv_data = "select d.* from sym_data d where d.data_id not in (select e.data_id from sym_data_event e);";

String client_outgoing = "select * from sym_outgoing_batch where node_id = '000' and channel_id != 'config' and status != 'OK';";
String client_data = "select d.* from sym_data d where d.data_id not in (select e.data_id from sym_data_event e);";

应该return 为空结果。前两个在服务器数据库上执行,后两个在客户端上执行。

这看起来不是一个好的解决方案,因为客户端必须能够访问服务器数据库,但是您可以,例如,在您的服务器上创建一个 servlet 来侦听一些 HTTP 请求,例如 "does server think that the sync is finished" 并在检查客户端数据库之前查询它

此外,这是一段旧代码,您不应该使用普通查询来连接 JDBC 并使用 Hibernate 或其他 ORM,因此它们会正确地转义您的参数并且您不容易SQL 注入(这里当然你可能在内部生成 node_id,但谁知道呢,也许你让用户以某种方式输入它,比如登录或其他)