浏览代码

fixed issue #4018, fixed CanalInstanceWithManager thread-safe

jianghang.loujh 3 年之前
父节点
当前提交
4a22d72ef4

+ 12 - 10
instance/manager/src/main/java/com/alibaba/otter/canal/instance/manager/CanalInstanceWithManager.java

@@ -347,16 +347,18 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
 
                     @Override
                     public TableMetaTSDB build(String destination, String springXml) {
-                        try {
-                            System.setProperty("canal.instance.tsdb.url", parameters.getTsdbJdbcUrl());
-                            System.setProperty("canal.instance.tsdb.dbUsername", parameters.getTsdbJdbcUserName());
-                            System.setProperty("canal.instance.tsdb.dbPassword", parameters.getTsdbJdbcPassword());
-
-                            return TableMetaTSDBBuilder.build(destination, "classpath:spring/tsdb/mysql-tsdb.xml");
-                        } finally {
-                            System.setProperty("canal.instance.tsdb.url", "");
-                            System.setProperty("canal.instance.tsdb.dbUsername", "");
-                            System.setProperty("canal.instance.tsdb.dbPassword", "");
+                        synchronized (CanalInstanceWithManager.class) {
+                            try {
+                                System.setProperty("canal.instance.tsdb.url", parameters.getTsdbJdbcUrl());
+                                System.setProperty("canal.instance.tsdb.dbUsername", parameters.getTsdbJdbcUserName());
+                                System.setProperty("canal.instance.tsdb.dbPassword", parameters.getTsdbJdbcPassword());
+
+                                return TableMetaTSDBBuilder.build(destination, "classpath:spring/tsdb/mysql-tsdb.xml");
+                            } finally {
+                                System.setProperty("canal.instance.tsdb.url", "");
+                                System.setProperty("canal.instance.tsdb.dbUsername", "");
+                                System.setProperty("canal.instance.tsdb.dbPassword", "");
+                            }
                         }
                     }
                 });