我需要编写代码,使用 SymmetricDS 并在按下按钮时同步两个 DB。即我需要按下按钮,它显示它正在同步,然后当没有更多更改时,它会显示“一切正常”并让我继续操作。
我已经解决了我需要做的所有事情,除了确定一切都同步的方法。
SymmetricDS 引擎部署在 Tomcat 8 中,我的应用程序也部署在那里,我使用 JMX MBeans 连接到 SymmetricDS 以启动/停止同步。
我需要编写代码,使用 SymmetricDS 并在按下按钮时同步两个 DB。即我需要按下按钮,它显示它正在同步,然后当没有更多更改时,它会显示“一切正常”并让我继续操作。
我已经解决了我需要做的所有事情,除了确定一切都同步的方法。
SymmetricDS 引擎部署在 Tomcat 8 中,我的应用程序也部署在那里,我使用 JMX MBeans 连接到 SymmetricDS 以启动/停止同步。
我发现这四个查询
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);";
应该返回空结果。前两个在服务器数据库上执行,后两个在客户端上执行。
这看起来不是一个好的解决方案,因为客户端必须能够访问服务器数据库,但是您可以,例如,在您的服务器上创建一个 servlet 来侦听一些 HTTP 请求,例如“服务器是否认为同步已完成”并在检查客户端数据库之前对其进行查询
此外,这是一段旧代码,您不应该使用普通查询来连接 JDBC 并使用 Hibernate 或其他 ORM,因此它们会正确转义您的参数并且您不容易受到 SQL 注入(当然,您可能是内部生成node_id
,但谁知道呢,也许你让用户以某种方式输入它,比如登录或其他东西)