如何确定同步完成SymmetricDS

时间:2015-02-19 09:53:38

标签: java tomcat jmx symmetricds

我需要编写代码,使用SymmetricDS并在按下按钮时同步两个DB。即我需要按下按钮,它表示它正在同步,然后当没有更多的更改时,它会说“一切都好”'并让我继续运作。

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

SymmetricDS引擎部署在Tomcat 8中,我的应用程序也部署在那里,我使用JMX MBean连接到SymmetricDS以启动/停止同步。

1 个答案:

答案 0 :(得分:0)

我发现了这四个查询

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);";

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

这看起来不是一个好的解决方案,因为客户端必须能够访问服务器数据库,但是您可以在服务器上创建一个监听某些HTTP请求的servlet,例如&# 34;服务器是否认为同步已完成"并在检查客户端数据库之前查询它

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