Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确定同步已完成_Java_Tomcat_Jmx_Symmetricds - Fatal编程技术网

Java 如何确定同步已完成

Java 如何确定同步已完成,java,tomcat,jmx,symmetricds,Java,Tomcat,Jmx,Symmetricds,我需要编写代码,它使用Symmetricd并在按下按钮时同步两个DB。也就是说,我需要按下按钮,它显示它正在同步,然后当没有更多更改时,它会显示“一切正常”,让我继续操作 我已经解决了所有需要做的事情,除了确定所有事情都同步的方法 SymmetricDS引擎部署在Tomcat 8中,我的应用程序也部署在那里,我使用JMX MBeans连接到SymmetricDS以启动/停止同步。我发现这四个查询 String serv_outgoing = "select * from sym_outgoing

我需要编写代码,它使用Symmetricd并在按下按钮时同步两个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注入(这里当然您可能正在内部生成
节点\u id
,但谁知道呢,也许您允许用户以某种方式输入它,比如登录或其他方式)

Hm,我认为您根本不需要启动/停止同步。让它在后台运行。要查看是否所有数据都已发送到目标数据库,请选择count(*)从sym_outgoing_batch sob,其中sob.status='OK'并等待它下降到0。对于传入数据,发出相同的查询,将
sym_outgoing_batch
替换为
sym_ingoing_batch
。不,问题是明确要求我这样做。它将通过非常坏到无的Internet连接使用,因此当用户可以通过互联网到达一个地方,他按下按钮来同步所有发生的事情,确保他做到了,并且去了没有互联网的地方。我使用JDBC查询数据库,或者SymmetricDS在JMX中有一些功能来覆盖这一点吗?好的,客户端希望这样做,我能做什么呢?)我必须找到一种实现方法