mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
远程配置代码整理
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user