duxinglangzi
2022-08-15 c83c1b4ee7ff9c01a7a67855863c281589f39c72
src/main/java/com/duxinglangzi/canal/starter/container/AbstractCanalTransponderContainer.java
@@ -9,8 +9,9 @@
import java.util.concurrent.TimeUnit;
/**
 * 抽象的canal transponder ,实现SmartLifecycle接口,声明周期由spring进行管理
 *
 * @author wuqiong 2022/4/11
 * @description
 */
public abstract class AbstractCanalTransponderContainer implements SmartLifecycle {
    protected boolean isRunning = false;
@@ -21,18 +22,23 @@
                    CanalEntry.EntryType.HEARTBEAT);
    protected abstract void doStart();
    protected abstract void initConnect();
    protected abstract void disconnect();
    @Override
    public void start() {
        setRunning(true);
        new Thread(() -> {
            // spring 启动后 才会进行canal数据拉取
            while (!ApplicationReadyListener.START_LISTENER_CONTAINER.get())
                sleep(5L * SLEEP_TIME_MILLI_SECONDS);
            initConnect();
            while (isRunning() && !Thread.currentThread().isInterrupted()) doStart();
            disconnect(); // 线程被终止或者容器已经停止,需要关闭连接
        }).start();
        setRunning(true);
    }
    @Override
@@ -44,6 +50,7 @@
    public void stop(Runnable callback) {
        callback.run();
        setRunning(false);
        sleep(SLEEP_TIME_MILLI_SECONDS);
    }
    @Override
@@ -51,7 +58,7 @@
        return isRunning;
    }
    protected void setRunning(boolean bool){
    protected void setRunning(boolean bool) {
        isRunning = bool;
    }