远程配置代码整理

This commit is contained in:
mcy
2019-01-31 09:45:52 +08:00
parent 7b6b332463
commit a20960834b
5 changed files with 168 additions and 148 deletions

View File

@@ -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);
}
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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();
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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);
}
}
}