java - 在带有 Java 扩展的 SymmetricDS 中使用后备同步 URL
问题描述
我有一种情况,我有一个移动系统,当它在路上时,它将通过引擎文件中指定的默认同步 URL 连接到 symmetricDS。但是,当该设备返回基地时,它最终会与主 symmetricDS 服务器在同一个内部网络上。因此它无法从网络内部解析外部主机名。
无论如何....我想设置一个 symmetricDS 扩展,以便它可以尝试默认 URL,然后如果它不起作用,则回退到 192.168.0.5 的辅助 IP。这是我认为我需要开始的代码片段。我从来没有做过任何java,所以我读到这里有点迷茫。
import java.net.URI;
import org.jumpmind.symmetric.ISymmetricEngine;
import org.jumpmind.symmetric.transport.ISyncUrlExtension;
import org.jumpmind.symmetric.ext.ISymmetricEngineAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SyncUrlRewrite implements ISymmetricEngineAware, ISyncUrlExtension {
protected Logger log = LoggerFactory.getLogger(getClass());
ISymmetricEngine engine;
@Override
public String resolveUrl(URI url) {
return url.toString();
}
@Override
public void setSymmetricEngine(ISymmetricEngine engine) {
this.engine = engine;
}
}
解决方案
您可以尝试使用该方法查看并实现ISyncUrlExtension
接口resolveUrl()
。要使其正常工作,请sync_url
为具有协议的节点配置ext://beanName
. beanName
是您在扩展 xml 文件中为扩展点指定的名称。
然后,您可以实现逻辑以使该resolveUrl()
方法解析,例如,您的移动客户端要在sync_url
字符串中尝试的 URL 列表。
public String resolveUrl(URI uri) {
if (uri.toString().startsWith("ext")) {
Map<String, String> params = getParameters(uri);
//Do some logic with your parsed parameters and return a url
} else {
else return uri.toString();
}
}
该类HttpBandwidthSelector
可以为您提供示例实现。
推荐阅读
- mysql - 我在一周中的某一天收到 1-7 的 int,我需要将它与 7 个工作日列进行比较?
- angular - Angular + .net Core 3 + Azure App Service - 仅在特定路由上允许 HTTP?
- node.js - URIError:无法解码参数 - 编码二进制图像 Filepond
- javascript - switch 语句不识别输入
- listview - Xamarin MVVM 从可绑定的 FlexLayout 中选择项目,类似于在 ListView 上选择项目
- react-native-android - 当我使用代码 react-native init App1 表示此错误时,我无法创建 react-native
- php - 如何在magento2中显示菜单的所有类别项
- typescript - 从 ejs-dropdownlist 中获取选定的项目对象
- vb.net - 如何模拟 OleDbDataAdapter(查询,connStr)
- mongodb - 具有 persistenceVolumeClaims 的 IBM Cloud stable/mongodb 图表