diff --git a/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/monitor/remote/DbRemoteConfigLoader.java b/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/monitor/remote/DbRemoteConfigLoader.java index 704a606f..a9a3bb6e 100644 --- a/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/monitor/remote/DbRemoteConfigLoader.java +++ b/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/monitor/remote/DbRemoteConfigLoader.java @@ -1,6 +1,5 @@ package com.alibaba.otter.canal.adapter.launcher.monitor.remote; -import java.io.File; import java.io.FileWriter; import java.sql.Connection; import java.sql.ResultSet; @@ -19,6 +18,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.otter.canal.common.utils.CommonUtils; import com.alibaba.otter.canal.common.utils.NamedThreadFactory; import com.google.common.base.Joiner; import com.google.common.collect.MapMaker; @@ -115,7 +115,7 @@ public class DbRemoteConfigLoader implements RemoteConfigLoader { * @param content 文件内容 */ private void overrideLocalCanalConfig(String content) { - try (FileWriter writer = new FileWriter(getConfPath() + "application.yml")) { + try (FileWriter writer = new FileWriter(CommonUtils.getConfPath() + "application.yml")) { writer.write(content); writer.flush(); } catch (Exception e) { @@ -209,41 +209,6 @@ public class DbRemoteConfigLoader implements RemoteConfigLoader { } } - private static boolean deleteDir(File dirFile) { - if (!dirFile.exists()) { - return false; - } - - if (dirFile.isFile()) { - return dirFile.delete(); - } else { - File[] files = dirFile.listFiles(); - if (files == null || files.length == 0) { - return dirFile.delete(); - } - for (File file : files) { - deleteDir(file); - } - } - - return dirFile.delete(); - } - - /** - * 获取conf文件夹所在路径 - * - * @return 路径地址 - */ - private String getConfPath() { - String classpath = this.getClass().getResource("/").getPath(); - String confPath = classpath + "../conf/"; - if (new File(confPath).exists()) { - return confPath; - } else { - return classpath; - } - } - /** * 启动监听数据库变化 */ @@ -280,44 +245,4 @@ public class DbRemoteConfigLoader implements RemoteConfigLoader { logger.error(e.getMessage(), e); } } - - private class RemoteAdapterMonitorImpl implements RemoteAdapterMonitor { - - @Override - public void onAdd(ConfigItem configItem) { - this.onModify(configItem); - } - - @Override - public void onModify(ConfigItem configItem) { - String confPath = getConfPath(); - String category = configItem.getCategory(); - File categoryDir = new File(confPath + category); - if (!categoryDir.isDirectory()) { - boolean mkDirs = categoryDir.mkdirs(); - if (!mkDirs) { - logger.info("## Create adapter category dir error: {}", category); - return; - } - } - String name = configItem.getName(); - try (FileWriter writer = new FileWriter( - confPath + category + "/" + configItem.getName())) { - writer.write(configItem.getContent()); - writer.flush(); - logger.info("## Loaded remote adapter config: {}/{}", category, name); - } catch (Exception e) { - logger.error(e.getMessage(), e); - } - } - - @Override - public void onDelete(String name) { - File file = new File(getConfPath() + name); - if (file.exists()) { - deleteDir(file); - logger.info("## Deleted and reloaded remote adapter config: {}", name); - } - } - } } diff --git a/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/monitor/remote/RemoteAdapterMonitorImpl.java b/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/monitor/remote/RemoteAdapterMonitorImpl.java new file mode 100644 index 00000000..6b4c2b81 --- /dev/null +++ b/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/monitor/remote/RemoteAdapterMonitorImpl.java @@ -0,0 +1,56 @@ +package com.alibaba.otter.canal.adapter.launcher.monitor.remote; + +import com.alibaba.otter.canal.common.utils.CommonUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileWriter; + +/** + * 远程配置监听器实现 + * + * @author rewerma 2019-01-25 下午05:20:16 + * @version 1.0.0 + */ +public class RemoteAdapterMonitorImpl implements RemoteAdapterMonitor { + + private static final Logger logger = LoggerFactory.getLogger(RemoteAdapterMonitorImpl.class); + + @Override + public void onAdd(ConfigItem configItem) { + this.onModify(configItem); + } + + @Override + public void onModify(ConfigItem configItem) { + String confPath = CommonUtils.getConfPath(); + String category = configItem.getCategory(); + File categoryDir = new File(confPath + category); + if (!categoryDir.isDirectory()) { + boolean mkDirs = categoryDir.mkdirs(); + if (!mkDirs) { + logger.info("## Create adapter category dir error: {}", category); + return; + } + } + String name = configItem.getName(); + try (FileWriter writer = new FileWriter(confPath + category + "/" + configItem.getName())) { + writer.write(configItem.getContent()); + writer.flush(); + logger.info("## Loaded remote adapter config: {}/{}", category, name); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + } + + @Override + public void onDelete(String name) { + File file = new File(CommonUtils.getConfPath() + name); + if (file.exists()) { + CommonUtils.deleteDir(file); + logger.info("## Deleted and reloaded remote adapter config: {}", name); + } + } + +} diff --git a/common/src/main/java/com/alibaba/otter/canal/common/utils/CommonUtils.java b/common/src/main/java/com/alibaba/otter/canal/common/utils/CommonUtils.java new file mode 100644 index 00000000..52b9621a --- /dev/null +++ b/common/src/main/java/com/alibaba/otter/canal/common/utils/CommonUtils.java @@ -0,0 +1,53 @@ +package com.alibaba.otter.canal.common.utils; + +import java.io.File; + +/** + * 通用工具类 + * + * @author rewerma 2019-01-25 下午05:20:16 + * @version 1.0.0 + */ +public class CommonUtils { + + /** + * 获取conf文件夹所在路径 + * + * @return 路径地址 + */ + public static String getConfPath() { + String classpath = CommonUtils.class.getResource("/").getPath(); + String confPath = classpath + "../conf/"; + if (new File(confPath).exists()) { + return confPath; + } else { + return classpath; + } + } + + /** + * 删除文件夹 + * + * @param dirFile 文件夹对象 + * @return 是否删除成功 + */ + public static boolean deleteDir(File dirFile) { + if (!dirFile.exists()) { + return false; + } + + if (dirFile.isFile()) { + return dirFile.delete(); + } else { + File[] files = dirFile.listFiles(); + if (files == null || files.length == 0) { + return dirFile.delete(); + } + for (File file : files) { + deleteDir(file); + } + } + + return dirFile.delete(); + } +} diff --git a/deployer/src/main/java/com/alibaba/otter/canal/deployer/monitor/remote/DbRemoteConfigLoader.java b/deployer/src/main/java/com/alibaba/otter/canal/deployer/monitor/remote/DbRemoteConfigLoader.java index 7cf7fef0..6cec0e46 100644 --- a/deployer/src/main/java/com/alibaba/otter/canal/deployer/monitor/remote/DbRemoteConfigLoader.java +++ b/deployer/src/main/java/com/alibaba/otter/canal/deployer/monitor/remote/DbRemoteConfigLoader.java @@ -1,7 +1,6 @@ package com.alibaba.otter.canal.deployer.monitor.remote; import java.io.ByteArrayInputStream; -import java.io.File; import java.io.FileWriter; import java.nio.charset.StandardCharsets; import java.sql.Connection; @@ -18,6 +17,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.otter.canal.common.utils.CommonUtils; import com.alibaba.otter.canal.common.utils.NamedThreadFactory; import com.alibaba.otter.canal.deployer.CanalConstants; import com.google.common.base.Joiner; @@ -101,7 +101,7 @@ public class DbRemoteConfigLoader implements RemoteConfigLoader { * @param content 远程配置内容文本 */ private void overrideLocalCanalConfig(String content) { - try (FileWriter writer = new FileWriter(getConfPath() + "canal.properties")) { + try (FileWriter writer = new FileWriter(CommonUtils.getConfPath() + "canal.properties")) { writer.write(content); writer.flush(); } catch (Exception e) { @@ -213,26 +213,6 @@ public class DbRemoteConfigLoader implements RemoteConfigLoader { } } - private static boolean deleteDir(File dirFile) { - if (!dirFile.exists()) { - return false; - } - - if (dirFile.isFile()) { - return dirFile.delete(); - } else { - File[] files = dirFile.listFiles(); - if (files == null || files.length == 0) { - return dirFile.delete(); - } - for (File file : files) { - deleteDir(file); - } - } - - return dirFile.delete(); - } - /** * 监听 canal 主配置和 instance 配置变化 * @@ -281,53 +261,4 @@ public class DbRemoteConfigLoader implements RemoteConfigLoader { } } - /** - * 获取conf文件夹所在路径 - * - * @return 路径地址 - */ - private String getConfPath() { - String classpath = this.getClass().getResource("/").getPath(); - String confPath = classpath + ".." + File.separator + "conf" + File.separator; - if (new File(confPath).exists()) { - return confPath; - } else { - return classpath; - } - } - - /** - * 远程xxx/instance.properties配置监听器实现 - */ - private class RemoteInstanceMonitorImpl implements RemoteInstanceMonitor { - - @Override - public void onAdd(ConfigItem configItem) { - this.onModify(configItem); - } - - @Override - public void onModify(ConfigItem configItem) { - File instanceDir = new File(getConfPath() + configItem.getName()); - if (!instanceDir.exists()) { - instanceDir.mkdirs(); - } - try (FileWriter writer = new FileWriter(getConfPath() + configItem.getName() + "/instance.properties")) { - writer.write(configItem.getContent()); - writer.flush(); - logger.info("## Loaded remote instance config: {}/instance.properties ", configItem.getName()); - } catch (Exception e) { - logger.error(e.getMessage(), e); - } - } - - @Override - public void onDelete(String instanceName) { - File file = new File(getConfPath() + instanceName + "/"); - if (file.exists()) { - deleteDir(file); - logger.info("## Deleted and loaded remote instance config: {} ", instanceName); - } - } - } } diff --git a/deployer/src/main/java/com/alibaba/otter/canal/deployer/monitor/remote/RemoteInstanceMonitorImpl.java b/deployer/src/main/java/com/alibaba/otter/canal/deployer/monitor/remote/RemoteInstanceMonitorImpl.java new file mode 100644 index 00000000..8eded2b1 --- /dev/null +++ b/deployer/src/main/java/com/alibaba/otter/canal/deployer/monitor/remote/RemoteInstanceMonitorImpl.java @@ -0,0 +1,55 @@ +package com.alibaba.otter.canal.deployer.monitor.remote; + +import java.io.File; +import java.io.FileWriter; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.alibaba.otter.canal.common.utils.CommonUtils; + +/** + * 远程xxx/instance.properties配置监听器实现 + * + * @author rewerma 2019-01-25 下午05:20:16 + * @version 1.0.0 + */ +public class RemoteInstanceMonitorImpl implements RemoteInstanceMonitor { + + private static final Logger logger = LoggerFactory.getLogger(RemoteInstanceMonitorImpl.class); + + @Override + public void onAdd(ConfigItem configItem) { + this.onModify(configItem); + } + + @Override + public void onModify(ConfigItem configItem) { + String confDir = CommonUtils.getConfPath() + configItem.getName(); + File instanceDir = new File(confDir); + if (!instanceDir.exists()) { + boolean mkDirs = instanceDir.mkdirs(); + if (!mkDirs) { + logger.info("## Error to create instance config dir: {}", configItem.getName()); + return; + } + } + try (FileWriter writer = new FileWriter(confDir + "/instance.properties")) { + writer.write(configItem.getContent()); + writer.flush(); + logger.info("## Loaded remote instance config: {}/instance.properties ", configItem.getName()); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + } + + @Override + public void onDelete(String instanceName) { + File file = new File(CommonUtils.getConfPath() + instanceName + "/"); + if (file.exists()) { + CommonUtils.deleteDir(file); + logger.info("## Deleted and loaded remote instance config: {} ", instanceName); + } + } + +}