簡體   English   中英

Spring SmartLifeCycle似乎不適用於后期構造

[英]Spring SmartLifeCycle does not seem to work with post construct

我正在使用Spring SmartLifeCycle來指定bean順序,如下所示:

public class MyBean implements SmartLifecycle {
    @PostConstruct
    public void init() {
        //Do stuff
    }

private boolean isRunning = false;

    @Override
    public boolean isAutoStartup() {
        LOGGER.warn("************** is autostartp");
        return true;
    }

    @Override
    public void stop(final Runnable callback) {
        stop();
        callback.run();
    }

    @Override
    public void start() {
        LOGGER.warn("************** start ");
        isRunning = true;
    }

    @Override
    public void stop() {
        LOGGER.warn("************** stop");
        isRunning = false;
    }

    @Override
    public boolean isRunning() {
        LOGGER.warn("************** is running" + isRunning);
        return isRunning;
    }

    @Override
    public int getPhase() {
        LOGGER.warn("************** phase " + (Integer.MIN_VALUE));
        return Integer.MIN_VALUE;
    }
}

該訂單似乎無法正常運行。 所有bean似乎都在考慮該階段之前就已構建,這是由應用程序啟動失敗引起的。

如何解決此問題並正確指定順序? 我使用不正確嗎?

好像您缺少getPhase()方法。 這用於控制實例化bean的順序。 在關機期間,順序相反。

沒有顯式階段的任何bean都會由Spring分配階段0(最常見),或者被賦予一個階段(如果它像JMS偵聽器一樣由Spring管理)。

除非您明確分配一個階段,否則Spring將做出“最佳猜測”,這可能不會產生期望的結果。

@Override
public int getPhase() {
    return 1;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM